如何使用数据类型的一次返回来返回错误
How to use one return for a data type to return an error?
我有一个使用结构体作为返回类型的代码。我想返回结构体的空实例作为错误,但在不是错误时返回结构体的解引用版本。我怎么能在整个函数中只使用一次返回?是的,使用两个return很容易,但是我只需要使用一个return。
”返回结构的空实例作为错误,但在不错误时返回该结构的解引用版本。
return (is_error? S() : *pointer_to_struct);
如果空实例不是指默认初始化的实例,那么您可以使用c++ 17 std::optional
或boost::optional
(来自Boost库)。或者你可以滚你自己的快速和肮脏的Optional
。当你可以忽略效率时,这一点也不难:
template< class Wrapped >
class Optional
{
private:
vector<Wrapped> data_;
public:
auto is_empty() const -> bool { return data_.empty(); }
auto ref() -> Wrapped& { return data_.at( 0 ); }
auto ref() const -> Wrapped const& { return data_.at( 0 ); }
Optional() {}
Optional( Wrapped value ) { data_.push_back( move( value ) ); }
};
我如何在整个函数中只使用一次返回来做到这一点?
从c++ 17开始可以使用std::optional(或Boost.Optional),例如
std::optional<some_struct> foo() {
if (...)
return something;
else // error
return {};
}
然后if (auto result = foo()) {
// use result.value() to get some_struct
// ...
} else {
// error
}
相关文章:
- 我是否需要在下一次转移时将所有权*转移回转移队列
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 在C++中一次将矢量值写入多个文件
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 为什么 zlib 放气初始化调用一次不起作用?
- 在一次迭代中从 txt 文件中读取多行
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 从子菜单返回后,正确的输入至少进入验证循环一次
- 如何在返回一次数据后从类实例中删除数据
- 递归:一次返回
- C++不止一次返回
- 如何使用C++单一实例返回仅初始化一次的对象
- C++重载getter两次,一次返回指针,另一次返回常量引用,都失败了
- 如何在c++中一次又一次地从函数返回
- 如何使用数据类型的一次返回来返回错误
- 如何写函数整洁?考虑到log,一次返回,不再缩进
- 为什么popn()一次又一次调用返回相同的输出
- Std::istringstream.good()比预期多返回一次true
- "Peek ahead"检查下一次对getline(file,line)的调用是否会返回false - 而不实际调用它,即不消耗该行
- C++跟踪一个项目一次,然后返回