2014-03-02 2 views

답변

21

유형이 객체가 아니기 때문에 유형을 전달할 수 없습니다. 그들은 런타임에 존재하지 않습니다.

template <typename T> 
void foo() { 
    cout << sizeof(T); 
} 

당신은, 예를 들어, foo<int>()을이 함수를 호출 할 수 있습니다 대신에, 당신은 당신이 컴파일시에 다른 유형의 기능을 인스턴스화 할 수있는 템플릿을합니다. Tint으로 대체 된 함수 버전을 인스턴스화합니다. 조회 : function templates.

+0

컴파일 속도에 신경 쓰지 않는 경우에만이 작업을 수행하십시오. –

+0

@RayGarner 당신은 어떻게 당신을 의미합니까? 두 개의 템플릿 인스턴스화가 두 클래스만큼 비싸지 않습니까? 내 이해는 숨겨진 클래스 때문에 템플릿이 컴파일 시간이 길어지며 템플릿이 어떻게 든 비싸지 않기 때문이 아닙니다. – TankorSmash

+0

@ TankorSmash Right well scale은 프로젝트와 규모가 작기 때문에 걱정할 필요가없는 한 중요한 포인트입니다. 그러나 모든 소형 프로젝트는 큰 프로젝트가됩니다. 따라서 FNG를 읽을 수있는 경우 컴파일 타임에 트레이드 오프를 알기를 원합니다. –

8

조셉 맨스필드 (Joseph Mansfield)가 지적했듯이, 함수 템플릿은 사용자가 원하는대로 할 것입니다.

template <typename T> 
void foo(T) { 
    cout << sizeof(T) 
} 

당신이 x 변수가 foo(x)로 함수를 호출 할 수 있습니다 : 어떤 경우에는, 당신이 명시 적으로 템플릿 인수를 지정하지 않아도 함수에 매개 변수를 추가하는 것은 의미가 있습니다 매개 변수없는 버전은 foo<T>()으로 호출되어야합니다.

관련 문제