/ / Частична специализация на шаблонната функция: "прототипът не съвпада" - c ++, шаблони, шаблон-специализация, частична специализация

Частична специализация на шаблона на функцията на члена: "прототипът не съвпада" - c ++, шаблони, специализация по шаблони, частична специализация

Опитвам се частично да специализирам шаблонна функция за член на незаразен клас:

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

Как мога да поправя грешката на компилатора?

Отговори:

9 за отговор № 1

Не се разрешава частична специализация на функции (член или по друг начин).

Използване на претоварване:

struct Bar {

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

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

};