【发布时间】:2021-12-25 11:41:45
【问题描述】:
有一个现有的expected<T,E> 类提供这些typedefs 和operators:
value_type = T
operator *(): expected<T,E>& -> value_type&
const expected<T,E>& -> const value_type&
expected<T,E>&& -> value_type&&
const expected<T,E>&& -> const value_type&&
现在我正在编写这样的函数:
template <typename E>
/*type*/ Unwrap(E&& e)
{
return e.has_value() ? /*what*/
: throw e.error();
}
我应该在评论区放什么?
我试过auto&& 和*e,它收到了excepted&&,但返回了value_type&。
我也试过std::forward,但还是编译不出来。
我该怎么办?
【问题讨论】:
-
我喜欢这个概念!我做了一堆可以“解包”指针或 throw、unique_ptr 或 throw、可选或 throw、共享指针或 throw……这很有趣! (显然是结果或错误
expected的变体,其意图也是如此。) -
@Eljay 您还可以添加一个名为
exceptionFactory的参数,代码如下:return e.has_value() ? *std::forward<E>(e) : throw exceptionFactory(e.error());
标签: c++ templates forward-reference