可以在模板定义之外专门化一些类成员函数:
template<class A>
struct B {
void f();
};
template<>
void B<int>::f() { ... }
template<>
void B<bool>::f() { ... }
在这种情况下,我什至可以省略f
通用类型的函数定义A
。
但是如何把这个专业化放在课堂上呢?像这样:
template<class A>
struct B {
void f();
void f<int>() { ... }
void f<bool>() { ... }
};
在这种情况下我应该使用什么语法?
编辑:现在代码行最少的解决方案是添加一个假模板函数f
定义并从原始函数显式调用它f
:
template<class A>
struct B {
void f() { f<A>(); }
template<class B>
void f();
template<>
void f<int>() { ... }
template<>
void f<bool>() { ... }
};