Я пытаюсь специализировать templatised функцию внутри templatised класса. Он отлично работает, пока я не добавлю специализацию: тогда он больше не компилируется.Почему эта специализированная функция не компилируется?
Вот упрощенный пример того, что такие вещи, что я пытаюсь сделать:
template <typename TString, typename TStringStream, typename TChar>
class TestClass
{
public:
template <typename T>
static T convert(const TChar* text);
};
//This specialisation doesn't compile
template <typename TString, typename TStringStream, typename TChar>
template <>
inline bool TestClass<TString, TStringStream, TChar>::convert(const TChar* text)
{
return strcmp(text, "true");
}
template <typename TString, typename TStringStream, typename TChar>
template <typename T>
T TestClass<TString, TStringStream, TChar>::convert(const TChar* text)
{
TStringStream textStream(text);
T result;
textStream >> result;
return result;
}
void main()
{
TestClass<RString, RStringstream, char>::convert<bool>("0");
}
Это ошибка компилятора Visual Studio 2010 возвращается, когда я пытаюсь скомпилировать это:
error C2244: 'TestClass<TString,TStringStream,TChar>::convert' : unable to match function definition to an existing declaration
definition
'bool TestClass<TString,TStringStream,TChar>::convert(const TChar *)'
existing declarations
'T TestClass<TString,TStringStream,TChar>::convert(const TChar *)'
Что я здесь делаю неправильно?
(Этот вопрос отличается от this one, потому что в этой связи они пытаются вернуть другой тип из того, что шаблон, очень особый случай, который я не пытаюсь сделать здесь.)
Возможный дубликат [Переопределение типа возвращаемого в шаблоне функции специализации] (http://stackoverflow.com/questions/15911890/overriding-return-type-in-function-template-specialization) – NathanOliver
Мои вопрос другой, потому что в этой ссылке они пытаются вернуть другой тип из того, что шаблон, очень частный случай, который я не пытаюсь здесь делать. – Oogst
ick, не делайте 'void main' – o11c