LINUX.ORG.RU

template<smth...>


0

0

Здравствуйте. Такой вопрос. имеется такой код:
---------------------------------------------------------
// bs_pool.h
#ifndef __BS_POOL_H
#define __BS_POOL_H

#include "bs_object_base.h"

namespace blue_sky {

template<class D_TYPE>
class _CLASS_DECLSPEC_PLUGIN_ bs_array_pool : public objbase
{
public: typedef std::list< smart_ptr< bs_array_pool, true > > instp_holder;
protected: static instp_holder inst_list_;

public:
~bs_array_pool() {}
private:
void dispose() const {delete this;};
protected:
bs_array_pool() {}
};

};

#endif // __BS_POOL_H

-----------------------------------------------------------------
//bs_pool.cpp
#include "bs_pool.h"

namespace blue_sky
{
...

template<>
bs_array_pool<int>::instp_holder bs_array_pool<int>::inst_list_;

...
};
-----------------------------------------------------------------

Я его собираю как shared object, с -fPIC, со всем... Но вот загвоздка,
когда вызываю dlopen("./this_one.so",RTLD_LAZY); мне возвращается пустой указатель на NULL...
dlerror() говорит, что:
/home/work/blue-sky/lib/libpool.so: undefined symbol: _ZN8blue_sky13bs_array_poolIiE10inst_list_E

То бишь, не может быть найдена явная спецификация шаблона... (та, что
от int в cpp-файле)...
extern в декларации не помогает, и в дефиниции тоже.

Если убрать дефиницию
template<>
bs_array_pool<int>::instp_holder bs_array_pool<int>::inst_list_;
то библиотека загружается нормально...

Короче мне нужно явно указать пустой шаблон, но это мешает загрузке so
/// Есть выход???

Может кто-нибудь сталкивался уже с такой проблемой...???

Ответ на: комментарий от Sectoid

>Шаблоны не получится засунуть в cpp-файлы, ибо external templates не работает как надо.

А нет информации, когда оно в gcc будет? Очень не хватает.. =(

anonymous
()
Ответ на: комментарий от Sectoid

Это не есть гуд... А какой-нибудь выход из сложившейся ситуации есть??? 0_О...

no_NaMe
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.