[英]How should we implement std::error_code compatible API?
假設我們正在編寫一個庫,並且我們希望對錯誤和異常提供精細的控制:
void foo();
void foo(std::error_code&);
我們實現foo()
作為拋出std::system_error
並讓foo(std::error_code&)
捕獲所有異常並提取error_code。
或者我們應該實現foo(std::error_code&)
作為一個永不拋出的函數,並根據錯誤代碼的存在在foo()
拋出一個函數?
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
作用,我想也是如此。
更少的例外總是更好,所以你應該使用第二個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.