我试图部分特化一个未模板类的模板化成员函数:
#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); };