> 백엔드 개발 > C++ > C의 멤버 함수 템플릿에 기본 템플릿 인수를 사용할 수 없는 이유는 무엇입니까?

C의 멤버 함수 템플릿에 기본 템플릿 인수를 사용할 수 없는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-10-27 12:38:01
원래의
994명이 탐색했습니다.

Why Can't Default Template Arguments Be Used for Member Function Templates in C  ?

기본 템플릿 인수: 왜 클래스 템플릿으로 제한됩니까?

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

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