如何使用数据类型的一次返回来返回错误

How to use one return for a data type to return an error?

本文关键字:返回 一次 回来 错误 何使用 数据类型      更新时间:2023-10-16

我有一个使用结构体作为返回类型的代码。我想返回结构体的空实例作为错误,但在不是错误时返回结构体的解引用版本。我怎么能在整个函数中只使用一次返回?是的,使用两个return很容易,但是我只需要使用一个return。

返回结构的空实例作为错误,但在不错误时返回该结构的解引用版本。

return (is_error? S() : *pointer_to_struct);

如果空实例不是指默认初始化的实例,那么您可以使用c++ 17 std::optionalboost::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
}