2

我正在尝试从用户定义的对象中获取布尔值。例如使用 float 或 int 我可以做类似的事情

float a = 3.5
if (a) doSomething();

我希望我的班级看起来像这样:

class Socket {
...
...
};
...
Socket T;

if (!T) cout << "Error occured";
else {
   doStuff();
}

当然我可以定义一个返回bool的函数(比如bool isValid();)并直接调用它,但是我想知道是否可以。

4

1 回答 1

2

在 C++11 中,您可以安全地将类型转换为布尔值:

explicit operator bool() const {return isValid();}

如果您的编译器不支持它,那么您可以explicit在没有;的情况下编写相同的东西。但是,这可能有点危险,因为它可以隐式转换为任何数字类型。相反,您可以使用一种称为安全 bool idiom的技巧:

private:
    typedef void (Socket::*safe_bool)() const;
    void safe_true() const {}
public:
    operator safe_bool() const {return isValid() ? &Socket::safe_true : 0;}

这将返回一个指针类型,它不能转换为除 之外的任何东西bool

于 2012-07-06T16:03:58.940 回答