在C ++ 11(或C ++)中,可以传递未完全指定的模板类型。具体来说,我想传递一个尚未定义其所有模板说明符的类型:
template <std::size_t N, typename ARRAYTYPE>
struct A {
ARRAYTYPE<int, N> int_array;
};
int main() {
A<10, std::array> my_a;
return 0;
}
我知道简单地重新定义ARRAYTYPE = std::array<int, 10>
会有效,但不会让我在ARRAYTYPE
的任何地方使用不同大小的A
:
template <std::size_t N, typename ARRAYTYPE>
struct A {
ARRAYTYPE<int, N> int_array;
ARRAYTYPE<int, 1> tiny_int_array;
};
这可能吗?
答案 0 :(得分:6)
它被称为“模板模板参数”,因为它是一个模板参数,其值是模板:
template <std::size_t N, template <typename, std::size_t> class ARRAYTYPE>
struct A {
ARRAYTYPE<int, N> int_array;
ARRAYTYPE<int, 1> tiny_int_array;
};
答案 1 :(得分:1)
那不是一个类型,而是一个模板:
template <std::size_t N, template <typename, std::size_t> class ARRAY_TMPL>
struct A {
ARRAY_TMPL<int, N> int_array;
};
答案 2 :(得分:0)
如果我了解您要完成的工作,可以将模板本身作为template template parameter传递。