2012-01-05 10 views
0

가변 인수 튜플을 함수의 인수로 사용하는 방법과이를 초기화하는 방법에 대해 조금 혼란 스럽습니다.tuple as function argument

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 a'가 튜플 외부에있는 이유는 무엇입니까? 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은 진짜 목적을 제공하지 않습니다.