2013-10-23 2 views
0

std :: error_code를 serialize하고 네트워크를 통해 전송 한 다음 다시 deserialize하려고합니다. 어쨌든이 작업을 수행하거나 정수 값을 std :: error_code와 매핑하는 변환 테이블 (switch-case)이 필요합니까?C++는 네트워크를 통해 전송하거나 디스크에 저장하기 위해 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. (일반적으로 일종의 ENUM에서 매핑) 정수 값; 및
  2. 그들을 생성 한 범주에 대한 포인터.

사용할 수있는 가능한 범주를 모두 알아야하며 값과 함께 적절한 범주를 전송해야하기 때문에 일반적인 경우 직렬화하는 것은 매우 어렵습니다. 그러면 수신자는 일치하는 카테고리를 로컬에서 찾아보고이를 사용하여 오류 코드를 작성해야합니다.

간단한 경우는 메시지, 범주 이름 및 오류 값을 가져 와서 보내는 것입니다. 이를 다시 error_code로 변환하는 것은 비현실적이지만 유스 케이스에 따라 충분할 수도 있습니다.

제어하는 ​​사용자 정의 범주의 error_codes를 직렬화하려는 경우 오류가 발생한 범주를 판별 할 필요가 없으므로 제어를 사용자 정의하는 카테고리를 직렬화하려면 사소한 것이어야합니다.

+0

+1에 대해서는 부분적으로 ' error_code로 다시 변환해야합니다. –