给出以下定义:
template <typename T>
class A {
public:
void f();
};
template <typename T>
void
A<T>::f()
{}
template <typename T>
class B {};
我将如何部分专门化
A<B<T>>::f
,即某些f
的B<T>
?我基本上是在寻找合适的魔术代替下面的???
template <???>
void
A<B<T>>::f()
{}
最佳答案
您可以从[temp.expl.spec]中获得明确的特化:
那是:
template <>
void A<B<int>>::f() {
std::cout << "B\n";
}
但是,不能对类模板的成员函数进行部分特化。您将必须对整个类(class)进行部分特化:
template <typename T>
class A<B<T>> {
public:
void f() {
std::cout << "B\n";
}
// ... all other members you want in A<B<T>> ...
};