C에서 클래스 멤버 함수의 부분 특수화
부분 특수화를 사용하면 템플릿 클래스 또는 함수의 특정 인스턴스화를 특수화할 수 있습니다. 이는 서로 다른 템플릿 인수 값에 대해 서로 다른 동작이 필요할 때 유용할 수 있습니다. 그러나 초보자들이 흔히 겪는 걸림돌은 클래스 멤버 함수의 부분 특화이다.
클래스 멤버 함수를 부분적으로 특화하려면 부분적으로 특화된 클래스 템플릿을 취하는 비멤버 템플릿 함수를 정의해야 한다. 매개변수. 예를 들어 다음 코드를 고려해 보겠습니다.
template <typename T, int nValue> class Object { private: T m_t; Object(); // Private constructor public: Object(T t): m_t(t) {} T Get() { return m_t; } Object& Deform() { m_t *= nValue; return *this; } }; // Partial specialization of the Deform() method for nValue = 0 template <typename T> Object<T, 0>& Object<T, 0>::Deform() { this->m_t = -1; return *this; }
이 예에서 Deform() 멤버 함수는 nValue가 0인 경우에 부분적으로 특화되어 있습니다. nValue의 다른 모든 값의 경우 기본 동작은 다음과 같습니다. 적용된. 이는 nValue가 0일 때 사용자 정의 동작을 허용하면서 다른 경우에 대한 일반 구현을 유지합니다.
참고: 단일 멤버 함수만 부분적으로 특수화할 수 없다는 점에 유의하는 것이 중요합니다. 멤버 함수를 부분적으로 특수화하려면 전체 클래스를 부분적으로 특수화해야 합니다. 이는 아래의 올바른 코드에 반영되어 있습니다.
template <typename T> class Object<T, 0> { private: T m_t; Object(); // Private constructor public: Object(T t): m_t(t) {} T Get() { return m_t; } Object& Deform() { std::cout << "Spec\n"; m_t = -1; return *this; } };
위 내용은 C에서 클래스 멤버 함수를 어떻게 부분적으로 전문화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!