2015-02-03 5 views
0

Я пытаюсь включить член шаблона в класс без шаблона. Вот пример:Элементы шаблона в классе

.h

class ncScript { 
public: 
template<typename T> void RegisterConstant(T value, const char *N); 
}; 

.cpp

template<> 
void RegisterConstant<int>(int value, const char * N) { 
    // Do something. 
} 

template<> 
void RegisterConstant<bool>(bool value, const char * N) { 
    // Do something. 
} 

// and so on 

Но когда я пытаюсь использовать его как:

_luaCache["myluafile"].RegisterConstant(13, "myvariable"); 

Я получаю следующее сообщение об ошибке в Xcode (Компилятор LLVM):

Explicit specialization of 'RegisterConstant<int>' after instantiation. 
+5

Вам, кажется, не хватает 'ncScript ::' перед вашими специализациями. Либо это, либо разместите свой * настоящий * код. И почему вы не просто перегружаете этот член? – WhozCraig

+0

[См. Вживую] (http://ideone.com/7p1Ovg) – WhozCraig

ответ

0

Ошибка указывает, что класс создается, прежде чем компилятор увидит специализации.

Например, если он видит это, класс либо уже создан, либо будет находиться здесь.

_luaCache["myluafile"].RegisterConstant(13, "myvariable"); 

Если специализации будут реализованы позже, вы получите сообщение об ошибке.

Простейшее решение ставит специализации объявлений в заголовке, т.е.

template<> 
void RegisterConstant<int>(int value, const char * N); 
+0

Спасибо, он работает! Я просто забыл объявить функцию вне класса. –

Смежные вопросы