>백엔드 개발 >C++ >템플릿 클래스의 꺾쇠 괄호 연산자를 올바르게 오버로드하는 방법은 무엇입니까?

템플릿 클래스의 꺾쇠 괄호 연산자를 올바르게 오버로드하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-01 15:29:02543검색

How to Properly Overload the Angle Bracket Operator for a Template Class?

템플릿 클래스의 꺾쇠 괄호 연산자 오버로드

<< 연산자를 템플릿 클래스 쌍의 친구로 사용하면 템플릿이 아닌 함수 선언을 나타내는 컴파일러 경고가 나타날 수 있습니다. 이 문제는 friend 선언과 실제 함수 정의 간의 불일치로 인해 발생합니다.

이 문제를 해결하려면 friend 선언이 특정 템플릿 인수가 있는 템플릿 클래스 쌍의 특수 인스턴스에 적용되도록 지정해야 합니다. 이는 빈 꺾쇠 괄호 <>를 사용하여 달성됩니다. friend 선언의 연산자 선언 뒤에.

수정된 코드는 다음과 같습니다.

<code class="cpp">template <class T, class U>
class Pair {
public:
    Pair(T v1, U v2) : val1(v1), val2(v2) {}
    ~Pair() {}
    Pair& operator=(const Pair&);
    friend ostream& operator<<<> (ostream&, Pair<T, U>&);

private:
    T val1;
    U val2;
};</code>

또한 오버로드된 연산자에 대한 함수 정의는 다음과 같이 템플릿 클래스 정의 앞에 선언되어야 합니다. 다음은 다음과 같습니다.

<code class="cpp">template <class T, class U>
ostream& operator<<<> (ostream& out, Pair<T, U>& v);

template <class T, class U>
class Pair {
    // ...
};</code>

이러한 변경을 통해 컴파일러는 friend 함수를 pair 템플릿의 특수화로 올바르게 식별하고 비템플릿 함수 선언과 관련된 경고를 피할 수 있습니다.

위 내용은 템플릿 클래스의 꺾쇠 괄호 연산자를 올바르게 오버로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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