>백엔드 개발 >C++ >C에서 클래스 멤버 함수를 어떻게 부분적으로 전문화할 수 있습니까?

C에서 클래스 멤버 함수를 어떻게 부분적으로 전문화할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-14 12:46:02772검색

How Can You Partially Specialize Class Member Functions in C  ?

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.