2

在 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;
};

这可能吗?

4

3 回答 3

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;
};
于 2012-06-29T16:33:36.193 回答
1

那不是一个类型,而是一个模板:

template <std::size_t N, template <typename, std::size_t> class ARRAY_TMPL>
struct A {
   ARRAY_TMPL<int, N> int_array;
};
于 2012-06-29T16:33:00.890 回答
0

如果我了解您要完成的工作,您可以将模板本身作为模板模板参数传递。

于 2012-06-29T16:31:48.833 回答