, I 섹션 :기능 서명 : C++ 템플릿 완전한 가이드
그것의 반환 유형의 경우 : 12.2.1 서명이 나는 저자의 문장을 이해할 수 없었다 함수는 함수 템플릿에서 생성됩니다.
"함수 템플릿에서 생성 된 함수"는 무엇을 의미합니까? , 여기서 템플릿 ID에 대해 이야기하고 있습니까? 그렇다면 왜 서명이 우리에 의해 정의 되었기 때문에 반환 유형이이 경우 중요합니까?
간단한 예제가 도움이 될 것입니다. 감사합니다.
, I 섹션 :기능 서명 : C++ 템플릿 완전한 가이드
그것의 반환 유형의 경우 : 12.2.1 서명이 나는 저자의 문장을 이해할 수 없었다 함수는 함수 템플릿에서 생성됩니다.
"함수 템플릿에서 생성 된 함수"는 무엇을 의미합니까? , 여기서 템플릿 ID에 대해 이야기하고 있습니까? 그렇다면 왜 서명이 우리에 의해 정의 되었기 때문에 반환 유형이이 경우 중요합니까?
간단한 예제가 도움이 될 것입니다. 감사합니다.
12.2.1 절에서 저자는 기능 선언이 공존 할 수있는 상황을 설명합니다. 그들은 예를 들어, 다른 반환 형식이있는 경우 기능 템플릿의 선언도 공존 할 수 있습니다, 당신은 선언 할 수 있습니다 :이 기능 이외의 템플릿을 만들 경우
template <typename T> int f();
tepmlate <typename T> char f();
, 당신도 그들을 선언 할 수 없습니다. 물론 위의 형식에서 캐스트를 사용하여 함수 중 하나를 명시 적으로 선택할 수는 있지만 함수를 호출 할 수는 없습니다 (이 점에 대해서는 확실하지 않습니다).
template <typename T>
typename std::enable_if<std::numeric_limits<T>::is_specialized, T>::type
f(T); // used for types for which std::numeric_limits<T> is specialied
template <typename T>
typename std::enable_if<!std::numeric_limits<T>::is_specialized, T>::type
f(T); // used for types for which std::numeric_limits<T> is not specialied
캐스트가 작동한다고 생각하지 않습니다. 문제는 'T'를 제공 할 수 없다는 것입니다 :'f
최악의 질문에 대한 답장을 보내 주시면 감사하겠습니다. (이 Q는 더 많은 언어 문제입니다.)하지만 필자는 작성자가 무엇인지, 그리고 단순히'return 기능 템플릿의 종류'? – M3taSpl0it
@ M3taSpl0it : 함수 템플릿은 함수는 아니지만이 섹션에서는 함수 템플릿 대신 실제 함수에서 작동하는 오버로드 집합의 상호 작용을 설명하려고합니다. 함수 템플릿에서 함수를 얻으려면 "생성"해야합니다. 내 생각에, 일반적으로 용어 * 인스턴스화 *가 사용되지만 저자가이 용어를 사용하지 않은 이유를 모르겠습니다. –
A :
(이 본래 의도하지 않았다하더라도) 상이한 반환형 공존과 기능을 갖는 주요 용도는, 예를 들면, 상태에 기초하여 과부하 세트에서 이러한 기능의 일부를 제거하는 것 책을 가지고 있지 않은 사람들에게 더 완벽한 인용문은 저자가 문맥에서 이야기하고있는 것을 이해하는 데 도움이 될 수 있습니다. –