我有一个类模板,我试图专门针对五种不同的情况:
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
这可能吗?
答案 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> {};