У меня есть и заголовок с шаблоном класса, который имеет только статические функции и поля.
template<typename T> class Luaproxy {
static std::map<std::string, fieldproxy> fields;
static const char * const CLASS_NAME;
static void addfields();
static int __newindex(lua_State * l){
//implemented stuff, references to fields...
}
//etc
}
Как видите, некоторые функции объявлены только потому, что я намерен реализовать их с помощью специализации шаблонов.
В файле .ccp у меня есть:
struct test { int a; }
template<> map<string, fieldproxy> Luaproxy<test>::fields;
template<> const char * const Luaproxy<test>::CLASS_NAME=typeid(test).name();
template<> void Luaproxy<test>::addfields(){
//stuff, references to fields...
}
Я получаю неопределенные ошибки ссылок на Luaproxy<test>::fields
как от функций, которые реализованы в заголовке, так и от тех, которые специализируются только на .cpp. Обратите внимание, что Luaproxy<test>::CLASS_NAME
и Luaproxy<test>::addfields
, по-видимому, встречаются при связывании.
Что делает это map
таким особенным?