Я пытаюсь частично специализировать шаблонную функцию-член нетэмплированного класса:
#include <iostream>
template<class T>
class Foo {};
struct Bar {
template<class T>
int fct(T);
};
template<class FloatT>
int Bar::fct(Foo<FloatT>) {}int main() {
Bar bar;
Foo<float> arg;
std::cout << bar.fct(arg);
}
Я получаю следующую ошибку:
c.cc:14: error: prototype for ‘int Bar::fct(Foo<FloatT>)’ does not match any in class ‘Bar’
c.cc:9: error: candidate is: template<class T> int Bar::fct(T)
Как я могу исправить ошибку компилятора?
Частичная специализация функций (членских или иных) не допускается.
Использовать перегрузку:
struct Bar {
template<class T>
int fct(T data);
template<class T> //this is overload, not [partial] specialization
int fct(Foo<T> data);
};
Других решений пока нет …