给出以下定义:

template <typename T>
class A {

public:

   void f();

};

template <typename T>
void
A<T>::f()
{}

template <typename T>
class B {};

我将如何部分专门化A<B<T>>::f,即某些fB<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>> ...
};

10-08 19:51