我有我的课,我重载了!
运算符:
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";
我该怎么办?
答案 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
重载的危险。这绝对值得一读