我们应该如何实现std :: error_code兼容的API?

aut*_*hir 6 c++ error-handling c++11

假设我们正在编写一个库,并且我们希望对错误和异常提供精细的控制:

void foo();
void foo(std::error_code&);
Run Code Online (Sandbox Code Playgroud)

我们可以实现foo()抛出a std::system_errorfoo(std::error_code&)捕获所有异常并提取error_code.

或者我们应该实现foo(std::error_code&)一个永不抛出的函数,并foo()根据错误代码的存在抛出一个函数?

For*_*veR 3

boost图书馆与例外和与工作boost::system::error_code,所以,我认为你可以定位这个图书馆。例如boost::asio::basic_stream_socket::connect有两个版本

void connect(
    const endpoint_type & peer_endpoint);
Run Code Online (Sandbox Code Playgroud)

boost::system::system_error 失败时抛出。

boost::system::error_code connect(
    const endpoint_type & peer_endpoint,
    boost::system::error_code & ec);
Run Code Online (Sandbox Code Playgroud)

ec 设置以指示发生了什么错误(如果有)。

但这取决于foo做什么,我也认为。