我为c ++实现了Result
/ Either
的实现。该课程的特色包括type-converting constructor:
template <typename V,typename E>
class Result {
...
template<typename X>
constexpr Result(X&& value);
...
};
这样做的目的是启用如下代码:
Result<SomeType,int> value = SomeType{...};
EXPECT_TRUE(result.isOk()); // TRUE
// Also
Result<SomeType,int> value = 10;
EXPECT_TRUE(result.isError()); // TRUE
这对于函数返回值很重要:
Result<SuccessType,int> func() {
SuccessType result{...};
...
return result;
}
...
EXPECT_TRUE(func().isOk());
现在事实证明,这样的构造函数过于宽容,并导致不良的类型转换。我想限制它。
所以问题是:
-您认为允许相同类型的Value结果和Error是否有用?例如:
Result<MyTypeA,MyTypeA> r{};
您是否有一个错误类型和成功类型相同且有用的示例?
此问题的动机是,我可以摆脱template 构造函数,但前提是V和E不是同一类型:
template<class V,class E>
struct Result {
constexpr result(V&& value);
constexpr result(E&& value);
...
- 此外,您认为仅使用r值构造函数在实践中就足够了吗? 我不认为Result 不是返回值-因此,没有任何理由不将值移出中间对象。