问题描述
std::pair<bool,std::string> fooFunction();
但这会使代码在创建返回值时变得多余,并迫使调用者处理元组(在c ++ 17中易于进行结构绑定)
if ( okayCondition)
return {true,{}};
else
return { false,"blabla error"};
或者我们可以使用
std::optional<std::string> fooFunction();
这对于返回bool的现有函数很有趣,因为由于std :: optional运算符bool,大多数调用者都不需要更新
//Legacy code ok
if (fooFunction())
我知道有一个更重的方法,一个模板化的ReturnStatus类,如果调用者未测试返回状态值,则会抛出该类。
还有其他方法吗?
解决方法
您可以考虑从函数中返回std::error_code
。
使用该类,您可以提供一个std::error_code::value
(可用于错误处理)和一个std::error_code::message
(如果有任何可操作的或可提供的信息)向用户显示信息。
做事的C ++方法是根本不返回状态。如果有错误,请抛出异常。错误代码是1980年代。