我们可以为模板化的类专门化一个模板类吗?

时间:2014-06-10 06:59:54

标签: c++ templates

我们可以为模板化的类专门化模板类吗?

template<>
class Storage8<MyClass<T>>
{
—
—
};

这里MyClass是一个模板类。以上是否有价值?我们在哪里提到 MyClass的模板?

2 个答案:

答案 0 :(得分:1)

你完全可以。例如:

#include <vector>
using std::vector;

template<typename T>
struct X {
    static const int A = 0;
};

template<typename U>
struct X<vector<U> > {
    static const int A = 1;
};

int main() {
    static_assert(X<vector<int> >::A == 1, "fail");
    return 0;
}

答案 1 :(得分:1)

这应该有效:

// class templae for Storage8. It can just be a forward declaration
template <typename T> class Storage8;

// or a default defintion.
template <typename T> class Storage8
{
};

// Class templae for MyClass
template <typename T>
class MyClass
{
};

// Specialization of Storage8 for MyClass<T>
template <typename T>
class Storage8<MyClass<T>>
{
};