2012-09-15 24 views
6

Giả sử chúng ta đang viết một thư viện và rằng chúng tôi muốn cung cấp kiểm soát hạt mịn hơn lỗi và ngoại lệ:Chúng tôi nên triển khai std :: error_code API tương thích như thế nào?

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

Linh hồn chúng ta thực hiện foo() như ném một std::system_error và để foo(std::error_code&) bắt tất cả các ngoại lệ và trích xuất các error_code.

Hoặc chúng tôi có thể triển khai foo(std::error_code&) làm chức năng không bao giờ ném và ném chức năng vào foo() tùy thuộc vào sự hiện diện của mã lỗi không?

+1

Xem xét tăng :: asio chẳng hạn. http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio/reference/basic_stream_socket/connect.html – ForEveR

+1

Tôi muốn nói điều đó cũng phụ thuộc vào những gì 'foo()' thực hiện. – netcoder

Trả lời

3

boost thư viện hoạt động với ngoại lệ và với boost::system::error_code, vì vậy, tôi nghĩ bạn có thể định hướng trên thư viện này. Ví dụ boost::asio::basic_stream_socket::connect có hai phiên bản

void connect(
    const endpoint_type & peer_endpoint); 

boost :: Hệ thống :: system_error Bị đẩy vào thất bại.

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

ec Set để chỉ ra những gì lỗi xảy ra, nếu có.

Nhưng điều đó phụ thuộc vào những gì foo, tôi cũng nghĩ vậy.

-4

Ít ngoại lệ luôn tốt hơn, vì vậy bạn nên sử dụng trường hợp thứ hai.

Các vấn đề liên quan