boost serialization를 사용하려면 이모저모로 귀찮은 점이 많아서, 생각해본 것이 파이썬의 struct 라이브러리와 같은 느낌으로 프로토콜 포맷을 정의하고, 이걸 boost tuple 코드로 뽑아낸다는 아이디어이다.

대강의 포맷은

Format C Type Python Notes
x pad byte no value  
c char string of length 1  
b signed char integer  
B unsigned char integer  
? _Bool bool (1)
h short integer  
H unsigned short integer  
i int integer  
I unsigned int integer or long  
l long integer  
L unsigned long long  
q long long long (2)
Q unsigned long
long
long (2)
f float float  
d double float  
s char[] string  
p char[] string  
P void * long  

가령 로그인 메시지를 “ppl” 이라는 포맷으로 정의하면, 파서는 이걸 읽고

typedef boost::tuple<string,string,long> msgLogin;

이라는 클래스를 정의한다는 거다. 요기에 좀 더 기능을 첨부하자면,

  • 64 bit integer
  • datetime, smalldatetime 등 T-SQL 타입 지원(또는 매핑)
  • STL 지원 : list, vector, map, set
  • 비트 연산 지원 : B3은 바이트 타입인데 3비트만 읽고 쓴다는 뜻이 된다.

단점이라면 내부 멤버 접근을 userid, passwd 같은 이름 기반이 아니라 get<1>, get<2> 처럼 해야 한다는 점인데, 이건 좀 심하게 귀찮긴 하겠다. 역시 이름 기반 접근이 그나마 컴파일러가 검증해주니 제일 좋은 방법인가.

자. 만들어주세요.