Q: 기본 템플릿 인수가 클래스 템플릿에만 허용되는 이유는 무엇입니까? 멤버 함수 템플릿에는 왜 안되나요?
예:
<code class="cpp">struct my_class { template<class T = int> void mymember(T* vec) { // ... } };</code>
C에 따르면 기본 템플릿 인수는 클래스 템플릿에만 유효합니다.
A: 기본 템플릿 인수는 실제로 유용합니다. 정렬 기능을 생각해 보세요.
<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>
그러나 현재 C의 제한에 대한 이론적 근거는 독립 기능이 덜 중요하다고 간주되었던 초기 언어에 뿌리를 두고 있습니다. 결과적으로 기본값 사용을 배제하고 함수 인수에서 모든 템플릿 인수를 추론해야 했습니다.
이러한 제한은 코드 유연성과 멤버 함수 템플릿과의 호환성을 방해합니다. 이를 바로잡기 위해 C 0x는 함수 템플릿에 대한 기본 템플릿 인수를 도입했습니다.
C의 창시자인 Bjarne Stroustrup이 결함 보고서에 언급했듯이:
"기본 템플릿 금지 함수 템플릿에 대한 인수는 독립 함수가 2급 시민으로 취급되어 모든 템플릿 인수를 지정하지 않고 함수 인수에서 추론하도록 요구하던 시대의 잘못된 잔재입니다."
"제한으로 인해 프로그래밍 스타일이 심각하게 제약을 받습니다. 불필요하게 독립 함수를 멤버 함수와 다르게 만들어 STL 스타일 코드를 작성하기 어렵게 만듭니다."
위 내용은 C의 클래스 템플릿에 대해서만 기본 템플릿 인수가 허용되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!