5

한다고 가정 나는 형식 매개 변수 만 반환 형식으로 사용되는 함수 템플릿이 있습니다구문 의심

template <typename T> 
T foo() 
{ 
    return whatever; 
} 

그런 다음 함수 템플릿을 전문으로하는 올바른 구문은 무엇입니까? 다음 두 가지가 작동하는 것 같습니다.

template <> 
std::string foo() 
{ 
    return whatever; 
} 

template <> 
std::string foo<std::string>() 
{ 
    return whatever; 
} 

둘 사이에 차이가 있습니까? 그렇지 않다면, 관용적 인 방법은 무엇입니까?

답변

1

컴파일러는 제공된 정보 (여기서는 함수 반환 유형)를 기반으로 올바른 템플릿 전문화를 추론합니다.

그래서이 구문은 완전히 똑같은 동작을합니다. 하나는 다른 것보다 명확합니다.

1

대부분의 경우 차이점이 없습니다.

여러 템플릿 함수에 과부하가 걸리는 경우 과부하가 무엇인가에 대한 모호성을 제거하려면 두 번째 형식이 필요할 수 있습니다 (이 상황에있는 경우 다른 문제가있을 수 있습니다. 예를 들어 통화 장소에서 노골적으로).

+0

이 예에서는 이미 호출 사이트에서 템플릿 인수를 추론 할 수 없습니다. –