関数内の引数として変数のタプルを使用する方法と、それを初期化する方法が可能であれば、少し混乱します。関数の引数としてのtuple
template <typename T, Arg ...>
void foo (int a, std::tuple<T, sizeof(Arg)> TupleTest);
...
foo(TupleTest(2, "TEST", 5.5));
これはどのようにしてC++ 0xを使用して実装できますか?
関数内の引数として変数のタプルを使用する方法と、それを初期化する方法が可能であれば、少し混乱します。関数の引数としてのtuple
template <typename T, Arg ...>
void foo (int a, std::tuple<T, sizeof(Arg)> TupleTest);
...
foo(TupleTest(2, "TEST", 5.5));
これはどのようにしてC++ 0xを使用して実装できますか?
テンプレート引数の数を取得する必要はありません。ちょうどこれを行う:
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));
何をしたいですか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
は本当の目的を果たしていない(あなたが明示的に空のテンプレートリストを禁止する必要がない限り)ので、あなただけの損失なしにそれを削除することができます。
これは少し不明です - 達成しようとしているのは何ですか? 'template void foo(std :: tuple t){/ * ... * /}'と言うだけです。 –
TupleTestとは何ですか?それはタプルの一種ですか?なぜint intがタプルの外側にあるのですか? 'sizeof(Arg)'を入れる意味はなんですか? – kennytm