2

我尝试实现一个模板类,并希望将其限制为专门用于某些给定的模板类。例如,在下面的代码中,我想定义模板类,该类CTest只能专门std::vector<T>用于某些模板参数T。对于其他模板参数,类应该是未定义的。如何实现模板类?

//   the interface should be something like following
//template <typename std::vector<T> >
//class CTest<std::vector<T> >;

int main(int argc, char* argv[])
{
    CTest<std::vector<int> > t1;    //  successful 
    CTest<std::vector<string> > t1; //  successful 
    CTest<int> t2;                  //  compile error
    return 0;
}
4

2 回答 2

2

保留未定义的主模板,仅部分专门化您想要承认的类型:

template <typename> class CTest;  // undefined


#include <vector>

template <typename T, typename Alloc>
class CTest<std::vector<T, Alloc>>
{
    // ... your template here ...
};
于 2013-05-19T10:08:26.527 回答
0

模板特化可以使用与它们特化的类模板完全不同的接口来实现。没有办法限制可以存在哪些模板特化。

如果您想对可以用作模板参数的内容产生一些影响,请改用模板实例化。

于 2013-05-19T10:10:33.967 回答