2012-01-05 19 views
0

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

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

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

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

+1

これは少し不明です - 達成しようとしているのは何ですか? 'template void foo(std :: tuple t){/ * ... * /}'と言うだけです。 –

+0

TupleTestとは何ですか?それはタプルの一種ですか?なぜint intがタプルの外側にあるのですか? 'sizeof(Arg)'を入れる意味はなんですか? – kennytm

答えて

6

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

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)); 
0

何をしたいですか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は本当の目的を果たしていない(あなたが明示的に空のテンプレートリストを禁止する必要がない限り)ので、あなただけの損失なしにそれを削除することができます。

関連する問題