msgpack定義了幾個序列化巨集,使用這些巨集,可大大簡化我們的序列化的**。
可用的巨集如下:
msgpack_define 宣告要用msgpack序列化的變數
msgpack_base 宣告要用msgpack序列化的基類型別
msgpack_define_array 以陣列/順序方式序列化
msgpack_define_map 以鍵值對方式序列化
msgpack_base_array 以陣列/順序方式序列化基類
msgpack_base_map 以鍵值對方式序列化基類
其中msgpack_define , msgpack_base 在定義了msgpack_use_define_map時,會被定義為msgpack_define_map和msgpack_base_map,否則會被定義為msgpack_define_array和msgpack_base_array
預設情況下msgpack_use_define_map不會被定義,但msgpack_define_map和msgpack_base_map仍可使用。
// 使用例項(以陣列/順序方式序列化):
struct sharevideo
;struct msg
msgpack_define_array(msgpack_base_array(msg), m_count, m_errorid,
m_vec_share_video)
virtual bool read(msgpack::object& obj)
virtual bool write(msgpack::packer& pack)
pack.pack(*this);
return true;
// 使用例項(以鍵值對方式序列化):
struct sharevideo
;struct msg
// 寫法1,基類成員在基類物件中
// 序列化後
// "msg": ,
// "m_count": m_count,
// "m_errorid": m_errorid,
// "m_vec_share_video":
// "m_videoid":m_videoid,
// "m_time":m_time,
// "m_usernike0":m_usernike[0],
// "m_usernike1":m_usernike[1],
// "m_usernike2":m_usernike[2],
// "m_usernike3":m_usernike[3],
// "m_score[0]":m_score[0],
// "m_score[1]":m_score[1],
// "m_score[2]":m_score[2],
// "m_score[3]":m_score[3],
msgpack_define_map(msgpack_base_map(msg), m_count, m_errorid,
m_vec_share_video)
// 寫法2, 將基類成員扁平化
// msgpack_define_map(m_msgid, m_count, m_errorid,
// m_vec_share_video)
virtual bool read(msgpack::object& obj)
virtual bool write(msgpack::packer& pack)
pack.pack(*this);
return true;
定長陣列寫的太麻煩?可以用std::array來申明定長陣列
struct sharevideo
;msgpack巨集的高階用法:
msgpack_pp_seq_for_each(macro, data, seq) 巨集迴圈
#define do_write(r, data, elem) buff.write(elem);
#define msg_write(...) \
virtual void write(lbuff& buff)\
class test
};
巨集的使用方法
巨集的使用方法 最近做專案需要記錄許多使用者選擇.例如記錄使用者選擇的星期.用笨方法的話,就用結構吧.例如typedef struct tagid bool week 1 bool week 2 bool week 3 bool week 4 bool week 5 bool week 6 bool...
ifndef def endif等巨集使用方法
從 一般情況下,源程式中所有的行都參加編譯。但是有時希望對其中一部分內容只在滿足一定條件才進行編譯,也就是對一部分內容指定編譯的條件,這就是 條件編 譯 有時,希望當滿足某條件時對一組語句進行編譯,而當條件不滿足時則編譯另一組語句。條件編譯命令最常見的形式為 ifdef 識別符號 程式段1 else...
TRACE巨集的使用方法
trace巨集對於vc下程式除錯來說是很有用的東西,有著類似printf的功能 該巨集僅僅在程式的debug版本中出現,當release的時候該巨集就完全消失了,從而幫助你除錯也在release的時候減少 量。使用非常簡單,格式如下 trace ddddddddddd trace wewe d 33...