我有使用struct作为返回类型的代码。我想返回结构的null实例作为错误,但是当没有错误时返回结构的解除引用版本。如何在整个函数中只使用一个返回来执行此操作?是的,使用两次返回非常容易,但我只需要使用一次返回。
答案 0 :(得分:0)
“返回结构的null实例作为错误,但在没有错误时返回结构的解除引用版本。
return (is_error? S() : *pointer_to_struct);
如果通过 null实例你并不是指默认初始化的那个,那么你可以使用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 ) ); }
};
免责声明:编译器未触及的代码。
答案 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
}