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

时间:2012-09-15 14:39:39

标签: c++ error-handling c++11

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

void foo();
void foo(std::error_code&);

我们应该实现foo()抛出std::system_error并让foo(std::error_code&)捕获所有异常并提取error_code。

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

2 个答案:

答案 0 :(得分:3)

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

void connect(
    const endpoint_type & peer_endpoint);
  

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

boost::system::error_code connect(
    const endpoint_type & peer_endpoint,
    boost::system::error_code & ec);
  

ec设置为指示发生了什么错误。

但这取决于foo的作用,我也认为。

答案 1 :(得分:-4)

更少的例外总是更好,所以你应该使用第二个。