Следующий код работает нормально, простой шаблонный класс с определением и использованием
#include <string>
#include <iostream>
using namespace std;
template<class T> class foo{
public:
string what();
};
template<class T> string foo<T>::what(){
return "foo of type T";
}
int main(){
foo<int> f;
cout << f.what() << endl;
}
Если я добавлю следующее (выше основного, но после объявления шаблона класса foo;)
template<> class foo<char>{
public:
string what();
};
template<> string foo<char>::what(){
return "foo of type char";
}
Я получаю ошибку от g ++
Строка 19: ошибка: идентификатор шаблона 'что <>'
для 'std :: string foo :: what ()'
не соответствует ни одному шаблону
декларация
Вот кодовая панель, показывающая ошибку: http://codepad.org/4HVBn9oJ
Какую очевидную ошибку я совершаю? Или это невозможно с шаблонами c ++?
Будет ли работать определение всех встроенных методов (с определением шаблона <> foo)?
Еще раз спасибо всем.