기본 템플릿 인수: 왜 클래스 템플릿으로 제한됩니까?
C에서 기본 템플릿 인수는 클래스 템플릿에만 허용됩니다. 이러한 제한으로 인해 멤버 함수 템플릿에 대해 이러한 인수를 정의할 수 없는 이유에 대한 의문이 제기됩니다.
다음 예를 고려하십시오.
<code class="cpp">struct my_class { template<class T = int> void mymember(T* vec) { // ... } };</code>
이 예에서는 기본 유형을 정의하려고 시도합니다. 멤버 함수 템플릿 내의 템플릿 매개변수 T 에 대한 것이지만 이 구문은 C 에서 허용되지 않습니다. 대신 기본 템플릿 인수는 클래스 템플릿으로 엄격히 제한됩니다.
제한 이유
함수 템플릿에 대한 기본 템플릿 인수 금지는 역사적인 이유에서 비롯됩니다. C의 초기 버전에서는 독립 함수가 언어의 템플릿 시스템에 완전히 통합되지 않았습니다. 좀 더 관용적인 것으로 간주되는 멤버 함수 템플릿의 사용을 장려하기 위해 기본 템플릿 인수는 클래스 템플릿으로 제한되었습니다.
그러나 이 제한은 이후 멤버 함수 템플릿을 불필요하게 구별하기 때문에 제한 사항으로 인식되었습니다. 및 독립형 함수 템플릿. 결함 보고서에서 Bjarne Stroustrup이 지적한 바와 같이:
"함수 템플릿에 대한 기본 템플릿 인수 금지는 잘못된 잔재입니다... [그것] 독립 함수를 멤버 함수와 다르게 불필요하게 만들어 프로그래밍 스타일을 심각하게 제약합니다. ."
C 0x 업데이트
이러한 우려에 대응하여 C 0x는 독립 함수 템플릿에 대한 기본 템플릿 인수를 도입했습니다. 이러한 변경으로 템플릿 프로그래밍의 유연성과 일관성이 향상되었습니다.
예
다음 C 0x 코드를 고려하세요.
<code class="cpp">template<typename Iterator, typename Comp = std::less< typename std::iterator_traits<Iterator>::value_type>> void sort(Iterator beg, Iterator end, Comp c = Comp()) { ... }</code>
이 예에서는 , Comp 템플릿 매개변수에 대해 기본 템플릿 인수가 지정되어 정렬 알고리즘이 기본적으로 표준 적은 비교 함수를 사용할 수 있습니다.
위 내용은 C의 멤버 함수 템플릿에 기본 템플릿 인수를 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!