2014-10-12 2 views
3

내가 기본 형식 매개 변수와 템플릿 구조체로, C++ 코드의 최소한의 인위적인 예를 :이 C++ 템플릿에서 형식을 지정해야하는 이유는 무엇입니까?

#include <iostream> 
using namespace std; 

template <class T=int> 
struct AddsFourtyTwo { 
    template <class U> 
    static U do_it(U u) { 
     return u + static_cast<T>(42); 
    } 
}; 

int main() { 
    double d = 1.24; 
    std::cout << AddsFourtyTwo::do_it(d) << std::endl; 
} 

이 코드를 컴파일 할 때, 나는 g ++ 4.9.1 다음과 같은 오류가 발생합니다 :

int에 T를 지정하면 컴파일되어 예상 출력 (43.24)을 생성합니다. 내 질문은, 왜 이것이 필요한가? 형식을 지정해야하는 경우 AddsFourtyTwo의 정의에서 기본 형식 매개 변수는 무엇을합니까?

+0

클래스는 여전히 템플릿이므로 빈 대괄호 쌍을 제공해야합니다. – 0x499602D2

+0

유형을 지정할 필요는 없지만 꺾쇠 괄호가 필요합니다. 'AddsFourtyTwo <> '는 정상입니다. –

답변

7

당신은 유형을 지정할 필요가 없습니다,하지만 언어가 어떤 인수 목록 를 지정하지 않고 실제 형식으로 템플릿을 사용하여 허용하지 : 템플릿 클래스를 사용

std::cout << AddsFourtyTwo<>::do_it(d) << std::endl; 
1

는 다음과 같은 구문을 필요

std::cout << AddsFourtyTwo<>::do_it(d) << std::endl; 

은 기본 매개 변수를 컴파일하고 사용합니다. 템플리트 화 된 메소드에는 필요하지 않으므로 혼란 스럽습니다.

관련 문제