4

ブール値のコンテキストでいくつかのクラスのインスタンスを評価したいと思います。または、より明確にするために、ブールコンテキストで直接使用された場合にオブジェクトがどのように反応するかを定義したいと思います。
ここに例があります:

class Foo 
{
  int state;
  Foo(): state(1) {}
  bool checkState()
  {
    return (state >= 0);
  }
  void doWork() 
  { 
    /*blah with state*/
  }
};

int main()
{
  Foo obj;
//while(obj.checkState())  //this works perfectly, and thats what i indent to do!
  while(obj)               //this is what want to write
    obj.doWork();
  return 0;
}

わかりました、それは持っているだけでいいです:-)、しかしこれはまったく可能ですか?はいの場合、どのように?

ありがとう!

4

2 に答える 2

13

明示的な変換演算子を使用してブール値を求めます。

explicit operator bool() const { return (state >= 0); }

これはまさにあなたが望むことを行います:オブジェクトがブールコンテキストで評価されたときに何が起こるかを定義します。

古いコンパイラを使用している場合は、を使用できません。これは、ブール値以外のコンテキストで(なしで)使用されてしまう可能性がexplicitあるため、悪いことです。その場合は、代わりに安全なブールイディオムを使用してください。operator bool()explicit

于 2013-03-22T14:35:18.687 に答える
2

あなたが使用することができますoperator bool()

explicit operator bool() const
{
    return (state >=0) ;
}

指摘したようexplicitに、これが整数のコンテキストで使用されるのを防ぐために使用する必要があります。また、mainはintを返す必要があります。

于 2013-03-22T14:36:46.617 に答える