2016-11-29 1 views
1

함수에 전달 된 매개 변수에서 추론 할 수있는 형식 템플릿 매개 변수와 형식이 아닌 템플릿 매개 변수를 모두 포함하는 템플릿 함수를 만들려고합니다. 명시 적으로 배치됩니다. 컴파일러가 각 유형이 무엇인지 추측 할 수있는 것처럼 보이지만 비 형식 템플릿 매개 변수를 지정하면 모든 템플릿 매개 변수가 필요합니다. 형식이 아닌 템플릿 매개 변수 만 지정할 수 있습니까, 아니면 모두 또는 아무것도 아니겠습니까?명시 적 유형이 아닌 매개 변수와 암시 적 형식 매개 변수가있는 템플릿 함수 호출

#include <iostream> 
#include <typeinfo> 

template <typename T, bool bPrint=true> 
void f(T var) { 
    if (bPrint) 
    std::cout << typeid(var).name() << std::endl; 
} 

int main() { 
    f(3); //works 
    f<false>(3); //error: template argument deduction/substitution failed 
} 
+0

템플릿 매개 변수는 동안 인스턴스 선언에서 정확히 동일한 순서로 템플릿에 전달해야 ... –

답변

3

템플릿 매개 변수는 인수 목록 끝에 있어야하지만 추론 할 수는 있습니다. 당신은 당신의 함수 템플릿의 매개 변수를 재정렬하여 코드를 컴파일 할 수 있습니다 :

template < bool bPrint=true, typename T> 
void f(T var) { 
    if (bPrint) 
    std::cout << typeid(var).name() << std::endl; 
} 

demo

관련 문제