2016-06-25 6 views
0

classB와 classC의 과도 적 오버라이드를 가진 classA라는 클래스가있는 경우 classC로 입력되는 classA에 대해 == 연산자를 비활성화 할 수 있습니까? C++ : 특정 유형에 대해 == 또는 다른 연산자를 제거하십시오.

class classA{ 
    operator classB(); 
    operator classC(); 

    //Remove this comparison possibility: 
    operator ==(classC firstObject,classC secondObject); 
} 

이 질문부터 따르

Ambiguous overload when using many typecasts operator overloads

+2

make operatorB 및 operatorC explicit? 이것은 완전한 예가 아닙니다. 최소한의 완벽한 예제 pls를 게시 할 수 있습니까? –

+1

누락 된';'때문에 코드가 작동하지 않습니다. 거기에 일종의 삼중 연산자가 있습니다. 'operator =='는 멤버라면 하나의 인수가 필요하고, 멤버가 아닌 경우에는 2가 필요합니다. ... 위의 설명에서 알 수 있듯이 [mcve]를 사용하여 지금까지 시도한 내용과 작동하지 않는 내용을 볼 수 있습니다. –

답변

3

C++ 11에서는 delete 개의 메소드를 사용할 수 있습니다.
이 방법을 비공개로 만드는 것과 비슷합니다.
그러나 프로그래머의 의도를 나타내므로 더 자세한 컴파일러 오류가 발생합니다.

class classA{ 
    operator classB(); 
    operator classC(); 

    //Remove this comparison possibility: 
    classC operator ==(classC secondObject) = delete; 
}; 
2

는 연산자를 정의하고 private합니다. 그렇다면 누구도 그걸 부를 수 없습니다.