Оказалось, что проблема в том, что реализацию метода я описал в cpp файле, а должен был в том же h. Внес внутрь — заработало. И с инстанцированием проблем нет, отлично отрабатывает:
MyClass *tf = new MyClass();
printf( "i=%d\n", tf->get<int>() );
printf( "f=%f\n", tf->get<double>() );
#
i=42
f=42.000000
Но тут возникла другая проблема. А как описать реализацию шаблона для конкретного типа?
tf->get<char*>()
Вот так не работает:
class MyClass {
public:
char* get();
template <typename T>
T get();
};
template <typename T>
T MyClass::get() {
T val;
val = 42;
return val;
}
char* MyClass::get() {
return "foo";
}
>>In member function ‘T MyClass::get() [with T = char*]’:
>> instantiated from here
// tf->get<char*>()
>> error: invalid conversion from ‘int’ to ‘char*’
// val = 42;