сериализация — c ++ сериализация std :: error_code для передачи по сети или сохранения на диск?

Я хочу сериализовать std :: error_code, передать его по сети и снова десериализовать. Есть ли в любом случае, чтобы сделать это, или мне понадобится таблица перевода (switch-case), которая отображает целочисленные значения в / из std :: error_code?

int encode_error(const std::error_code& ec);
std::error_code decode_error(int value);

Благодарю.

0

Решение

std::error_code это сочетание двух вещей:

  1. Целочисленное значение (обычно отображается из некоторого перечисления); а также
  2. Указатель на категорию, которая их сгенерировала.

Сериализовать их в общем случае очень сложно, так как вам необходимо знать все возможные категории, которые можно использовать, а затем передать, какая категория подходит, вместе со значением. Затем получатель должен будет найти соответствующую категорию локально и использовать ее для создания кода ошибки.

Более простой случай — получить сообщение, имя категории и значение ошибки и отправить его. Было бы нецелесообразно переводить это обратно в код ошибки, но в зависимости от вашего варианта использования этого может быть достаточно.

Если вы хотите сериализовать коды ошибок из пользовательской категории, которой вы управляете, намного проще, так как вы избавляетесь от необходимости определять, из какой категории произошла ошибка, поэтому сериализовать ее должно быть тривиально.

1

Другие решения

Вам нужно использовать std::error_condition, который является переносимым кодом ошибки.

2

По вопросам рекламы [email protected]