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>利用することはできません。ARRAYTYPEA

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 に答える