在 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 值。我在想我用智能指针看到的行为,如果它指向 nullptr
或 0
,则实例被认为是假的。
我将如何模拟这种行为?
在您的 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;
}
};
我有一个Line
表示笛卡尔平面上一条直线的相关信息。在其他成员中,该类型具有一个 bool
指示是否定义斜率。我希望能够做到以下几点:
if(my_line){
double new_slope = my_line.slope * 9;
}
其中实例 my_line
本身在布尔上下文中隐式转换为 true/false 值。我在想我用智能指针看到的行为,如果它指向 nullptr
或 0
,则实例被认为是假的。
我将如何模拟这种行为?
在您的 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;
}
};