簡體   English   中英

我們應該如何實現std :: error_code兼容的API?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM