msgpack巨集使用方法

2021-07-31 23:40:14 字數 2399 閱讀 6015



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...