2

たとえば、クラスを定義しました

class MyClass
{
   ....
};

MyClassオブジェクトとの if 比較を行うには、どの演算子をオーバーロードする必要がありますか?

例えば:

MyClass cc;
if ( cc ) // compile error
{
   //do some stuff
}

で試しました

 bool operator == ( int value ) ; //guess the if () will call this

また

 bool operator != ( int value ) ;   

しかし、どちらもコンパイルエラーになります!

4

4 に答える 4

6

bool変換演算子を提供する必要があります。

struct MyClass
{
  explicit operator bool() const { return true; }   
};

ここでは、explicit演算子を使用して、他の型、特に数値型への望ましくない暗黙的な変換を防ぎます。これは C++11 以降でのみ可能であることに注意してください。

于 2013-03-25T14:00:15.707 に答える
4

operator bool()あなたが望むものです。class から type への型変換を処理しますbool

于 2013-03-25T13:59:20.367 に答える
4

boolまたは に変換可能なものに対して、変換演算子を提供する必要がありますbool。C++11 を使用している場合、最善の方法は次のとおりです。

class MyClass
{
public:
  explicit operator bool () const {
    ...
  }
};

C++11 (または少なくとも明示的な変換演算子のサポート) を持っていない場合、事態はもう少しトリッキーになります (暗黙の変換は、予期しないときに本当に痛いほど蹴られる可能性があるため)。これに関する詳細については、安全な bool イディオムを参照してください。

于 2013-03-25T14:02:47.473 に答える
2

をオーバーライドすることもできますoperator bool()が、あなたの例によれば、 を返す単純なメソッドを作成することも検討してくださいbool。次に、その使用法は、たとえば次のようになります。

MyClass cc;
if (cc.isValid())
{
   // do some stuff
}

この場合、これはより簡単で読みやすくなります。カスタム オペレータは多くの点で優れていますが、強制しないでください。シンプルにしておく方が良い場合もあります:)

于 2013-03-25T14:01:46.737 に答える