设计一个可以在if语句中测试的类?

gli*_*ite 3 c++ if-statement operator-overloading

我有我的课,我重载了!操作员:

class obj
{
public:

    bool operator!() const
    { return this->str.length() == 0; }

private:

    string str;

};
Run Code Online (Sandbox Code Playgroud)

对于!运营商我想检查obj有效性,所以:

obj o;

// if o is not a valid object
if(!o)
   cerr << "Error";
Run Code Online (Sandbox Code Playgroud)

现在我希望有可能这样做:

// if o is a valid object
if(o)
   cout << "OK";
Run Code Online (Sandbox Code Playgroud)

我能怎么做?

tem*_*def 6

使用C++ 11,您可以通过以下方式执行此操作explicit operator bool:

explicit operator bool() const {
    return !!*this;
}
Run Code Online (Sandbox Code Playgroud)

如果您需要将对象bool显式转换为显式(由if语句自动完成),则调用此运算符.该实现通过调用您operator !的接收器对象,然后返回相反的结果来工作.

希望这可以帮助!

  • 谢谢,这很有趣,但如果我不能使用C++ 11? (3认同)
  • @gliderkite:见[本文](http://www.artima.com/cppsource/safebool.html). (3认同)