Как мы должны реализовать 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()
в зависимости от наличия кода ошибки?
2 ответа:
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
, я тоже так думаю.