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

时间:2012-06-29 17:46:26

标签: c++ if-statement operator-overloading

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

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";

我该怎么办?

2 个答案:

答案 0 :(得分:6)

使用C ++ 11,您可以通过explicit operator bool

来完成此操作
explicit operator bool() const {
    return !!*this;
}

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

希望这有帮助!

答案 1 :(得分: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