Ter*_*kal 4 c++ class operator-overloading
是否有可能让类对象返回true/false值,所以我可以这样做:
MyClass a;
...
if (a)
do_something();
Run Code Online (Sandbox Code Playgroud)
我可以通过重载来完成(几乎)我想要的东西!运营商:
class MyClass {
...
bool operator!() const { return !some_condition; };
...
}
main()
MyClass a;
...
if (!a)
do_something_different();
Run Code Online (Sandbox Code Playgroud)
但我还没有找到一种方法来重载什么是"空"运算符.当然,使用==运算符检查true/false也是可能的,事实上我到目前为止一直在做.
小智 8
重载void*cast操作符:
operator void * () const { return some_condition; };
Run Code Online (Sandbox Code Playgroud)
这就是流的工作原理,让你说:
if ( cin ) {
// stream is OK
}
Run Code Online (Sandbox Code Playgroud)
使用void*而不是bool可以防止在某些情况下错误地使用强制转换,例如算术,这是不可取的.当然,除非您想在这些环境中使用它.
很奇怪,到目前为止还没有人提到过安全的bool成语.到目前为止所描述的所有其他解决方案都有缺点(您可能会或可能不会关心),所有这些方法都在本文中进行了描述.简而言之,安全bool成语是这样的:
class Testable {
typedef void (Testable::*bool_type)() const;
void this_type_does_not_support_comparisons() const {}
public:
operator bool_type() const {
return /* condition here */ ?
&Testable::this_type_does_not_support_comparisons // true value
: 0; // false value
}
};
Run Code Online (Sandbox Code Playgroud)