2012-09-15 24 views
6

假设我们正在编写一个库,我们要提供对错误和异常精细控制:我们应该如何实现std :: error_code兼容的API?

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

要高度重视,我们实现foo()作为投掷std::system_error,让foo(std::error_code&)捕获所有的异常,并提取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

回答

3

boost图书馆与例外和boost::system::error_code,因此,我认为你可以定位在这个图书馆。例如boost::asio::basic_stream_socket::connect

两个版本
void connect(
    const endpoint_type & peer_endpoint); 

的boost ::系统:: SYSTEM_ERROR扔到失败。

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

EC设置为表示如果有什么错误发生。

但这取决于foo做什么,我想也是。

-4

减少异常总是更好,所以你应该使用第二个。

相关问题