[英]How to set value of a variable in C++ when it's not in global scope and used in custom function?
[英]C++: how to return object's set state when used as logical value
我有一些可以設置或不設置的 class :
Class obj;
我希望它的值在邏輯中使用時返回它是否已設置:
if ( obj )
obj.Clear();
if ( !obj )
obj.Set( "foo" );
我想添加到 bool 的隱式轉換,但我想知道是否需要 int 或者是否有更好的方法來 go 解決這個問題。
可以定義一個bool
運算符,如下
#include <iostream>
struct Object{
bool state;
explicit operator bool()const{
return state;
}
};
int main(){
Object o1;
Object o2;
o1.state = false;
o2.state = true;
std::cout << "\no1 state is " << (o1? "true": "false");
std::cout << "\no2 state is " << (!o2? "false": "true");
}
output 是
o1 state is false
o2 state is true
您可以使用std::optional
或std::shared_ptr
。
示例 1:
std::optional<Object> obj = Object();
if (obj) obj->useIt();
obj.reset();
if (obj) ... ;
示例 2
std::shared_ptr<Object> obj = new Object();
if (obj) obj->useIt();
obj.reset();
if (obj) ... ;
您應該使用std::optional
表示可選值。 這是自我記錄,其他程序員知道他們在做什么,並且您避免檢查您自己的 class 的不變狀態(降低復雜性)。 它還對值包裝器使用 STL 約定(與迭代器、智能指針等相同)。
如果您不想或根本無法使用它,請查看它的實現並遵循相同的規則:
std::optional::has_value()
) 請注意, if (...)
對語句執行顯式布爾轉換。 所以通常不需要隱式轉換。 為了避免使用重載時出現問題,對於顯式轉換運算符,您應該始終使用 go。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.