このから、独自の構造をシリアライズできることは明らかです。外部 (C 言語) ライブラリから構造をシリアル化する必要があります。変更できない構造体/クラスで msgpack をどのように使用しますか?
このようなちょっと、私がやりたいことの単なる概念:
#include <foo.h>
#include <msgpack.hpp>
FooObj* fo, fo2;
fo->bar = 0x00ff0000;
fo->lounge = 0x0000ff00;
fo->saloon = 0x000000ff;
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, *fo);
//send as msg / recv as req
msgpack::unpacked unpacked;
msgpack::unpack(&unpacked, reinterpret_cast<char*>(req.data()), req.size());
msgpack::object obj = unpacked.get();
// convert it back into Foo
obj.convert(*bp);
より明確にするために、回避する必要があるエラー/usr/include/msgpack/object.hpp:218:4: error: no member named 'msgpack_pack' in 'Foo'
はリンカーからのものです。
注: C++ で msgpack をサードパーティ (標準ライブラリではなく) のクラスと構造体で使用できない場合は、それを処理できるシリアル化ソリューションを見つける必要があります。また、シリアル化するサードパーティ クラスごとに包括的なラッパーを作成する必要がある場合、それは不可能だと思います。コードを他のアップストリームの変更と同期する必要があるライブラリは、それを使用するだけでは役に立ちません。