템플릿의 멤버 전문화
템플릿 클래스의 특정 멤버를 부분적으로 전문화하는 것은 불가능합니다. 부분 특수화는 모든 템플릿 인수를 제공해야 합니다. 그러나 유사한 기능을 달성하기 위한 대체 접근 방식이 있습니다.
오버로드된 함수
한 가지 해결 방법은 템플릿 클래스 내에 오버로드된 함수를 도입하는 것입니다. 이는 특수화된 멤버 함수와 마찬가지로 멤버 변수 및 함수에 대한 동일한 액세스를 제공합니다.
<code class="cpp">template <typename t bool b> struct X { void Specialized(); }; template <typename t> void X<t true>::Specialized() { // True-specialized implementation } template <typename t> void X<t false>::Specialized() { // False-specialized implementation }</t></typename></t></typename></typename></code>
템플릿 매개변수를 사용한 함수 오버로딩
또 다른 옵션은 특수화 매개변수를 다음과 같이 전달하는 것입니다. 구조체에 래핑된 템플릿 매개변수를 사용하는 추가 함수 인수.
<code class="cpp">template <typename t bool b> struct X { void Specialized() { SpecializedImpl(i2t<b>()); } private: void SpecializedImpl(i2t<true>) { // True-specialized implementation } void SpecializedImpl(i2t<false>) { // False-specialized implementation } };</false></true></b></typename></code>
특수화를 위한 별도의 클래스 템플릿
특수 동작도 별도의 클래스 템플릿에서 구현할 수 있습니다. 그리고 기본 템플릿 클래스 내에서 호출됩니다.
<code class="cpp">template <typename t bool b> struct SpecializedImpl { static void call() { // True- or false-specialized implementation } }; template <typename t bool b> struct X { void Specialized() { SpecializedImpl<t b>::call(); } };</t></typename></typename></code>
특수화를 위한 중첩 템플릿 클래스
특수 동작은 기본 템플릿 클래스 내에 템플릿 클래스로 중첩될 수 있습니다. .
<code class="cpp">template <typename t bool b> struct X { private: template <bool b> struct SpecializedImpl { }; public: void Specialized() { SpecializedImpl<b>::call(); } private: template struct SpecializedImpl<true> { static void call() { // True-specialized implementation } }; template struct SpecializedImpl<false> { static void call() { // False-specialized implementation } }; };</false></true></b></bool></typename></code>
위 내용은 C 템플릿에서 회원 전문화를 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!