小编dw2*_*192的帖子

这是 std::expected 的正确便捷包装吗?

如果我正在编写一个返回对象的函数std::expected,并可能调用其他返回std::expected对象的函数,我发现自己编写这样的代码片段非常常见。

struct Foo {  };
std::expected<Foo, std::string> f();

auto res = f();
if(!res) return std::unexpected { res.error() };
auto val = res.value();
// do something with val
Run Code Online (Sandbox Code Playgroud)

所以我编写了一个这样的宏,在成功时“返回”值,在失败时“返回”错误。

#define CHECK(expr)\
({\
auto res = expr;\
if(!res) return std::unexpected { res.error() };\
res.value();\
})
Run Code Online (Sandbox Code Playgroud)

然后我可以这样使用它:

Foo foo = CHECK(f());
Run Code Online (Sandbox Code Playgroud)

我假设内部作用域中变量的生命周期应该与赋值表达式一样长。它是否正确?有没有什么情况可能会出错?

c++ std std-expected

3
推荐指数
1
解决办法
219
查看次数

标签 统计

c++ ×1

std ×1

std-expected ×1