3

我有我的课,在那里我重载了!运算符:

class obj
{
public:

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

private:

    string str;

};

!操作员一起,我想检查obj有效性,所以:

obj o;

// if o is not a valid object
if(!o)
   cerr << "Error";

现在我想有可能这样做:

// if o is a valid object
if(o)
   cout << "OK";

我能怎么做?

4

2 回答 2

6

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

explicit operator bool() const {
    return !!*this;
}

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

希望这可以帮助!

于 2012-06-29T17:47:32.567 回答
1

根据您的使用情况,您似乎需要重载bool运算符而不是!运算符。

class obj
{
public:

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

private:

    string str;

};

编辑

ildjarn 在评论中提供了一个很好的链接,说明进行简单bool重载的危险。绝对值得一读

http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Safe_bool

于 2012-06-29T18:00:38.053 回答