1

可変タプルを関数の引数として使用する方法と、それを初期化する方法が可能であれば、少し混乱しています。

    template <typename T, Arg ...> 
      void foo (int a, std::tuple<T, sizeof(Arg)> TupleTest);
...

foo(TupleTest(2, "TEST", 5.5));

c++0x を使用してどのように実装できますか?

4

2 に答える 2

9

テンプレート引数の数を取得する必要はありません。これを行うだけです:

template <typename... T>
void foo(int a, std::tuple<T...> TupleTest);

// make_tuple so we don't need to enter all the type names
foo(0, std::make_tuple(2, "TEST", 5.5));
于 2012-01-05T19:18:10.317 に答える
2

あなたは何をしたいsizeofですか?可変個展開を使用するだけです:

template <typename T, typename Arg ...> 
void foo(int a, std::tuple<T, Arg...> TupleTest);

ここでTupleTestは、型名ではなく、引数の名前です。そのため、メソッドを呼び出すときは使用しないでください。

foo(42, std::tuple<int, char const*, double>(2, "TEST", 5.5));

最後に、type 引数Tは (空のテンプレート リストを明示的に禁止したい場合を除いて) 本当の目的を果たさないので、失うことなく削除することができます。

于 2012-01-05T19:26:37.587 に答える