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

这可能吗?

最佳答案

之所以称为“模板模板参数”,是因为它是一个模板参数,其值为模板:

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

关于c++ - 传递带有免费模板参数的模板类型名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11265561/

10-11 23:23