如何使用一个返回数据类型来返回错误?

时间:2016-10-31 02:06:04

标签: c++ struct return

我有使用struct作为返回类型的代码。我想返回结构的null实例作为错误,但是当没有错误时返回结构的解除引用版本。如何在整个函数中只使用一个返回来执行此操作?是的,使用两次返回非常容易,但我只需要使用一次返回。

2 个答案:

答案 0 :(得分:0)

  

返回结构的null实例作为错误,但在没有错误时返回结构的解除引用版本。

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

如果通过 null实例你并不是指默认初始化的那个,那么你可以使用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 ) ); }
};

免责声明:编译器未触及的代码。

答案 1 :(得分:0)

  

如何只使用整个函数中的一个返回来执行此操作?

自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
}