如何将我的类模板专门化为更少的参数

时间:2014-04-30 02:13:17

标签: c++ templates template-specialization

我有一个类模板,我试图专门针对五种不同的情况:

template<size_t Number, typename T>
class Foo {};

template<typename T>
class Foo {}; // I get template argument errors here

template<size_t Number, typename T, size_t Size>
class Foo<Number, T[Size]> {};

template<size_t Number, typename T>
class Foo<Number, T[]> {};

template<typename T>
class Foo<T[]> {};  // I get template argument errors here too

这可能吗?

3 个答案:

答案 0 :(得分:4)

没有。相反,您可以创建部分特化。对于第一次尝试专业化,你想要什么数字?然后填写:template <typename T> class Foo<3, T> {};

答案 1 :(得分:0)

我认为这可以帮助你...... http://www.cplusplus.com/doc/tutorial/templates/ 你可以看到模板规范部分,并得到一个明确的例子..

希望有帮助

答案 2 :(得分:0)

我最终得到了这个接口,其中Number -1在编译时基于我的类中的实现细节而失败。这样您必须指定有效的Number

template<typename T, size_t Number = -1>
class Foo {};

template<typename T>
class Foo<T, -1> {};

template<typename T, size_t Size, size_t Number>
class Foo<T[Size], Number> {};

template<typename T, size_t Number>
class Foo<T[], Number> {};

template<typename T>
class Foo<T[], -1> {};