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

6
假设我们正在编写一个库,并且希望在错误和异常方面提供细粒度的控制:
void foo();
void foo(std::error_code&);

我们是否应该将foo()实现为抛出一个std::system_error,然后让foo(std::error_code&)捕获所有异常并提取错误代码?
或者我们是否应该将foo(std::error_code&)实现为一个永远不会抛出异常的函数,并根据错误代码的存在在foo()中抛出一个函数?

1
以boost::asio为例。http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio/reference/basic_stream_socket/connect.html - ForEveR
1
我认为这也取决于foo()函数的作用。 - netcoder
2个回答

3

boost库使用异常和boost::system::error_code,因此我认为你可以参考这个库。例如boost::asio::basic_stream_socket::connect有两个版本。

void connect(
    const endpoint_type & peer_endpoint);
在失败时抛出。
boost::system::error_code connect(
    const endpoint_type & peer_endpoint,
    boost::system::error_code & ec);

ec用于指示发生的错误,如果有的话。

但这取决于foo做了什么,我也不确定。


-4

异常越少越好,因此您应该使用第二个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接