在 C++ 的布尔上下文中创建用户定义类型 true/false

Make user-defined types true/false in boolean context in c++

我有一个Line表示笛卡尔平面上一条直线的相关信息。在其他成员中,该类型具有一个 bool 指示是否定义斜率。我希望能够做到以下几点:

if(my_line){
   double new_slope = my_line.slope * 9;
}

其中实例 my_line 本身在布尔上下文中隐式转换为 true/false 值。我在想我用智能指针看到的行为,如果它指向 nullptr0,则实例被认为是假的。

我将如何模拟这种行为?

在您的 Line class 中,实现一个 bool 转换运算符。您还可以选择重载 operator!, but that is not required in C++11 and later. See Contextual conversions.

例如:

class Line {
    bool mSlopeDefined;
    ...

public:
    ...

    explicit operator bool() const noexcept {
        return mSlopeDefined;
    }

    // optional since C++11, but doesn't hurt...
    bool operator!() const {
        return !mSlopeDefined;
    }
};