Частичная специализация шаблона функции-члена: «прототип не соответствует»

Я пытаюсь частично специализировать шаблонную функцию-член нетэмплированного класса:

#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)

Как я могу исправить ошибку компилятора?

6

Решение

Частичная специализация функций (членских или иных) не допускается.

Использовать перегрузку:

struct Bar {

template<class T>
int fct(T data);

template<class T>    //this is overload, not [partial] specialization
int fct(Foo<T> data);

};
9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]