获取 while、if 和 for 语句的用户定义类的对象值
Getting a value of object for user-defined classes for while, if and for statements
我正在尝试从用户定义的对象中获取布尔值。例如,使用 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
以外的任何内容。
相关文章:
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- Visual C++(VS2017)中用户定义的转换不明确
- 使用用户定义的参数调用future/async并调用类方法
- 带有用户定义类的c++折叠表达式
- g++用户定义的动态链接库上的全局new和delete运算符
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 修改"std::set"中用户定义类型的值
- 参数包构造函数在类模板中隐藏用户定义的转换
- MAKE:找不到包含的用户定义的头文件?
- C++:用户定义的显式类型转换函数错误
- 从用户定义的类生成格式字符串?
- 为用户定义的类正确调用复制构造函数/赋值运算符
- C++ 向量与用户定义的类比较?(==, <, >)
- STL 用户定义的二进制操作
- 将用户定义的类型与 std::vector 和 std::sort 一起使用
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 使用宏编译时使用用户定义的数学函数,或者仅使用 c++ 中标准数学库中的函数
- C++:用户定义的类,以成员字段作为地址