> 백엔드 개발 > C++ > 본문

기본 템플릿 인수가 C의 클래스 템플릿으로만 제한되는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-27 13:35:29
원래의
451명이 탐색했습니다.

Why Are Default Template Arguments Restricted to Only Class Templates in C  ?

기본 템플릿 인수: 왜 클래스 템플릿으로 제한되나요?

기본 템플릿 인수가 제공하는 편리함에도 불구하고 이상하게도 클래스 템플릿으로 제한됩니다. , 프로그래머는 왜 멤버 함수 템플릿에 적용할 수 없는지 궁금해하게 됩니다.

함수 템플릿의 기본 템플릿 인수에 대한 인수

멤버가 있는 my_class의 예를 생각해 보세요. 함수 템플릿:

<code class="cpp">struct my_class {
  template<class T = int>
  void mymember(T* vec) {
    // ...
  }
};</code>
로그인 후 복사

직관적으로 멤버 함수 템플릿에서 T에 대한 기본 유형을 지정하는 것이 합리적입니다. 그러나 C에서는 기본 템플릿 인수가 클래스 템플릿에만 허용된다는 제한을 적용합니다.

제한 이유

이 제한은 독립 함수가 사용되었던 역사적 이유에서 비롯됩니다. 회원 기능에 비해 열등한 것으로 간주됩니다. 모든 템플릿 인수를 함수 인수에서 추론함으로써 일관된 처리를 보장했습니다.

함수 템플릿의 기본 템플릿 인수의 미래

C 0x는 한계를 인식했습니다. 기존 제한의. 함수 템플릿에 대한 기본 템플릿 인수를 포함하면 코딩 유연성이 향상되고 STL 프로그래밍 스타일과 일치합니다.

이 변경을 지지하는 Bjarne Stroustrup에 따르면 함수 템플릿에 대한 기본 템플릿 인수 금지는 "잘못된 것"입니다. 남은." 그는 독립 함수와 멤버 함수를 불필요하게 구별하여 코드의 일관성을 유지하기 어렵게 한다고 주장합니다.

함수 템플릿에서 기본 템플릿 인수의 이점

소개 함수 템플릿에 기본 템플릿 인수를 추가하면 더욱 간편하고 직관적인 코딩 환경이 가능해집니다. 예를 들어 정렬 함수의 경우를 생각해 보세요.

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!