不是部分专业化但仍然是不完整的类型

时间:2014-12-17 14:44:41

标签: c++ templates

鉴于以下计划:

template <class T>
class A {
    void f();
};

template <class T>
class B { };

template <class T>
void A<B<T> >::f() {

}

我收到错误:

invalid use of incomplete type ‘class A<B<T> >’

这是否算作部分专业化?我一直认为部分专业化只专注于模板参数的结构子集。

我是否有任何工作可以完成模板化模板的专门化?

1 个答案:

答案 0 :(得分:0)

不可能只部分专门化一个成员函数,你必须专门化整个类

template <class T>
class A {
    void f();
};

template <class T>
class B { };

template <class T>
class A<B<T> >{
    void f() { /* put here what you need in this special case */}; 
};