2012-08-06 4 views
3

에 호출 일치 기능은 고려하지?는 가변 매개 변수 팩 기능

error: no matching function for call to ‘fog(const std::tuple<int, double>&, const std::tuple<int, double>&)’ 
note: candidate is: 
note: template<int N, class ... Vs, class ... Ts> void fog(const std::tuple<Vs ...>&, const std::tuple<_Tail ...>&) 

예, 나는 적분 템플릿 매개 변수 N이 필요합니다. (이것은 아래로 삶은 예입니다.)

+0

답변을 모두 제공해 주셔서 감사합니다. @mfontanini는 몇 초 더 빨랐습니다. 나는 다른 기준을 가지고 있지 않다. – ritter

답변

6

매개 변수 팩을 확장하지 마십시오

fog<0>(vs,ts); 

그렇지 않으면 컴파일러가있는 튜플에 속하는 템플릿 매개 변수를 알 수 없습니다. 이렇게하면 튜플의 템플릿 매개 변수가 평소와 같이 공제됩니다.

5

쓰기 :

fog<0>(vs,ts); 

대신

fog<0,Vs...,Ts...>(vs,ts); 

의 컴파일러를 보자는 유형을 추론.

두 번째 형식이 작동하지 않는 이유는 variadic 매개 변수가 마지막 매개 변수 일 수 있기 때문입니다. 해당 형식의 두 가지 변수 템플릿 매개 변수가있을 수 없습니다.

+0

후보자는 나에게 약간 이상하게 보였다. ('_Tail'에 주목하라.)'const std :: tuple & const std :: tuple <_Tail ...> &'. 이 증상입니까? – ritter