[英]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.