Я хочу сериализовать std :: error_code, передать его по сети и снова десериализовать. Есть ли в любом случае, чтобы сделать это, или мне понадобится таблица перевода (switch-case), которая отображает целочисленные значения в / из std :: error_code?
int encode_error(const std::error_code& ec);
std::error_code decode_error(int value);
Благодарю.
std::error_code
это сочетание двух вещей:
Сериализовать их в общем случае очень сложно, так как вам необходимо знать все возможные категории, которые можно использовать, а затем передать, какая категория подходит, вместе со значением. Затем получатель должен будет найти соответствующую категорию локально и использовать ее для создания кода ошибки.
Более простой случай — получить сообщение, имя категории и значение ошибки и отправить его. Было бы нецелесообразно переводить это обратно в код ошибки, но в зависимости от вашего варианта использования этого может быть достаточно.
Если вы хотите сериализовать коды ошибок из пользовательской категории, которой вы управляете, намного проще, так как вы избавляетесь от необходимости определять, из какой категории произошла ошибка, поэтому сериализовать ее должно быть тривиально.
Вам нужно использовать std::error_condition
, который является переносимым кодом ошибки.