error handling - Can I mix C and C++ IO? -
intro
sync_with_stdio
, enabled default states internally c , c++ use same buffer streams. there no interoperability beyond that. can't example construct basic_rdbuf
file
, need use basic_rdbuf::open
.
what i'm trying do
i'd use exceptions io there's problem. it's true can use strerror
error message, that's way down stack. c++ io has 1 exception (failure
) , has 1 error code (io_errc::stream
). there no granularity, catching exception far away error occurred not helpful.
here's problem. can configure throw exceptions on failbit
. not failbit
errors exceptions. example:
try { filestr.open(":^("); if (!(file >> input)) { // error } } catch (ios_base::failure& e) { cout << strerror(errno); }
this groups "bad user input" "file not exist", think bad design.
ideally i'd have separation of concerns. like:
try { auto file = std::fopen(...); if ( /* bad conditional */ ) throw custom_exception_with_error_code(errno); } catch (custom_exception_with_error_code& e) { if (e.code() == some_error_code) { /* handle error */ } } auto stream = std::some_something_that_accepts_file(file); /* ... */
this rough sketch. i'm working out details.
the moral
i'd ideally not have start writing bulky custom stream classes scratch. i'm looking friendly built-in way this. possible?
i'm looking advice on flaws approach.
Comments
Post a Comment