![](/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.