2012-09-15 27 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

減少異常總是更好,所以你應該使用第二個。

相關問題