【问题标题】:c++ serialize std::error_code for transporting over network or saving to disk?c ++序列化std :: error_code以通过网络传输或保存到磁盘?
【发布时间】:2013-11-02 02:14:13
【问题描述】:

我想序列化一个 std::error_code,通过网络传输它并再次反序列化它。有没有办法做到这一点,或者我需要一个将整数值映射到/从 std::error_code 的转换表(switch-case)?

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

谢谢。

【问题讨论】:

标签: c++ serialization c++11 std error-code


【解决方案1】:

std::error_code 是两件事的组合:

  1. 一个整数值(通常从某种枚举映射);和
  2. 指向生成它们的类别的指针。

在一般情况下序列化它们非常困难,因为您需要知道所有可能使用的类别,然后将哪个类别与值一起传输是合适的。然后接收者需要在本地查找匹配的类别并使用它来创建错误代码。

更简单的情况是获取消息、类别名称和错误值,然后发送它们。将其转换回 error_code 是不切实际的,但根据您的用例,这可能就足够了。

如果您想从您控制的自定义类别中序列化 error_codes,则要简单得多,因为您无需确定错误来自哪个类别,因此序列化它应该是微不足道的。

【讨论】:

  • +1 表示在某些情况下不需要转换回错误代码。
【解决方案2】:

您需要使用std::error_condition,这是一个可移植的错误代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    相关资源
    最近更新 更多