2013-10-23 46 views
0

我想序列化std :: error_code,通過網絡傳輸並再次反序列化。無論如何要做到這一點,或者我需要一個翻譯表(開關櫃),它將整數值映射到/從std :: error_code?C++ serialize std :: error_code通過網絡傳輸或保存到磁盤?

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

謝謝。

+0

[boost :: serialization](http://www.boost.org/doc/libs/1_34_0/libs/serialization/doc/index.html) – user1810087

回答

1

std::error_code是兩件事情的組合:

  1. 的整數值(通常從某種類型的枚舉映射);和
  2. 指向生成它們的類別的指針。

要在一般情況下序列化它們是非常困難的,因爲您需要知道可能使用的所有可能的類別,然後傳輸哪個類別與該值一致是適當的。接收者然後需要在本地查找匹配的類別並使用它從中創建錯誤代碼。

更簡單的情況是獲取消息,類別名稱和錯誤值,併發送該消息。把它轉換回error_code是不切實際的,但根據你的用例,這可能就足夠了。

如果您想從您控制的自定義類別中序列化error_codes更簡單,因爲您不需要確定錯誤來自哪個類別,所以對其進行序列化應該是微不足道的。

+0

對於有關不存在其他情況的部分, t必須轉換回error_code。 –