2016-06-25 7 views
0

classBとclassCの型キャストオーバーロードを持つclassAというクラスがある場合、classAとしてclassCを入力するにはどのようにして==演算子を無効にできますか?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 =='はメンバーの場合は1つの引数を必要とし、メンバーでない場合は2つの引数を必要とします。 ...上のコメントが言っているように、あなたがこれまでに試したこととそれについて働いていないことが分かるように、[mcve]を取得しましょう。 –

答えて

3

C++ 11では、deleteのメソッドを使用できます。
これは、メソッドをprivateにするのと同様です。
しかし、それはプログラマの意図を表し、より記述的なコンパイラエラーをもたらす。

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

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

オペレータを定義し、それprivateします。それから、誰もそれを呼び出すことはできません。

関連する問題