![](/img/trans.png)
[英]C++ How can I construct an object inside a class function, do some operations and return the value?
[英]How can I return a value from a class object?
是否有可能让类对象返回true / false值,所以我可以这样做:
MyClass a;
...
if (a)
do_something();
我可以通过重载来完成(几乎)我想要的东西! 运营商:
class MyClass {
...
bool operator!() const { return !some_condition; };
...
}
main()
MyClass a;
...
if (!a)
do_something_different();
但我还没有找到一种方法来重载什么是“空”运算符。 当然,使用==运算符检查true / false也是可能的,事实上我到目前为止一直在做。
重载void * cast操作符:
operator void * () const { return some_condition; };
这就是流的工作原理,让你说:
if ( cin ) {
// stream is OK
}
使用void *而不是bool可以防止在某些情况下错误地使用强制转换,例如算术,这是不可取的。 当然,除非您想在这些环境中使用它。
显而易见的解决方案 - 通过operator bool
提供对bool
的隐式转换 - 是一个坏主意。
这就是标准库使用operator void*
,如Neil的回答所示。
然而,值得指出的是,即使这种解决方案也存在缺陷,因此不再被认为是安全的。 不幸的是,想出一个更好的解决方案并非易事......
在Artima上有一篇文章描述了安全的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
}
};
尝试重载(bool)运算符:
operator bool() { /* ... */ }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.