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

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

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

Спасибо.


person Amir Taaki    schedule 23.10.2013    source источник
comment
boost::serialization   -  person user1810087    schedule 23.10.2013


Ответы (2)


std::error_code представляет собой комбинацию двух вещей:

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

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

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

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

person Dave S    schedule 23.10.2013
comment
+1 за часть о том, что есть случаи, когда нет необходимости переводить обратно в error_code. - person wood_brian; 24.10.2013

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

person Daniel Frey    schedule 23.10.2013