最近,我观看了Andrei Alexandrescu发表的关于“C++ 中的系统错误处理”的演讲。提议的 Expected 模板的结构如下:
template<class T> class Expected {
union {
T ham;
std::exception_ptr spam;
};
bool gotHam;
};
使用联合使实现有点复杂,因为您需要按gotHam
字段分支,然后决定如何处理联合中的数据。即初始化列表上的初始化不能为ham
和完成spam
。
我想知道简化版本是否会更好。
template<class T> class Expected {
union { T ham; };
std::exception_ptr spam;
};
在这种情况下spam
,无论何时发生错误,都可以用作指示器。