获取 while、if 和 for 语句的用户定义类的对象值

Getting a value of object for user-defined classes for while, if and for statements

本文关键字:用户 定义 对象 语句 while if for 获取      更新时间:2023-10-16

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

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

我希望我的类看起来像这样:

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

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

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

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

如果你的编译器不支持这一点,那么你可以在没有explicit的情况下编写同样的东西;但是,这可能有点危险,因为它支持隐式转换为任何数值类型。相反,您可以使用称为安全布尔习语的黑客:

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

这将返回一个指针类型,该指针类型不能转换为除 bool 以外的任何内容。