2014-05-12 2 views
1

이 문제를 어떻게 해결할 수 있습니까?가변성 템플릿, size_t

#include <iostream> 
using namespace std; 

template<size_t I, size_t... T> 
void fun() 
{ 
    cout<<I<<endl; 
    fun<T...>(); 
} 

template<size_t I> 
void fun() 
{ 
    cout<<I<<endl; 
} 


int main() 
{ 
    fun<1, 2>(); 
    fun<3>(); 
    return 0; 
} 

오류 :

|21|error: call of overloaded 'fun()' is ambiguous| 
|21|note: candidates are:| 
|5|note: void fun() [with unsigned int I = 3u; 
unsigned int ...T = {}]| |12|note: void fun() [with unsigned int I = 
3u]| In instantiation of 'void fun() [with unsigned int I = 2u; 
unsigned int ...T = {}]':| |8|required from 'void fun() [with 
unsigned int I = 1u; unsigned int ...T = {2u}]'| |20|required from 
here| |8|error: no matching function for call to 'fun()'| |8|note: 
candidate is:| |5|note: template<unsigned int I, unsigned int ...T> 
void fun()| |5|note: template argument deduction/substitution 
failed:| |8|note: couldn't deduce template parameter 'I'| 
+1

힌트 : 첫 번째 자연수 기본 케이스는 0 인수를 사용할 수있다, 없다 1 –

답변

3

는 가변 버전은 두 개 이상의 템플릿 인수를 허용합니다.

template<size_t I> 
void fun() 
{ 
    cout<<I<<endl; 
} 

template<size_t I1, size_t I2, size_t... T> 
void fun() 
{ 
    cout<<I1<<endl; 
    fun<I2, T...>(); 
} 
+1

다른 방법 0 :'템플릿을 <> 무효 재미() {}' –

+0

@ChrisDodd 예, 그건 내 선호 될 것이다 솔루션입니다. – Brian

+0

@ChrisDodd 오류 : 'fun fun()'의 template-id 'fun <>'이 (가) 템플릿 선언과 일치하지 않습니다. – user3403717