1

このから、独自の構造をシリアライズできることは明らかです。外部 (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 をサードパーティ (標準ライブラリではなく) のクラスと構造体で使用できない場合は、それを処理できるシリアル化ソリューションを見つける必要があります。また、シリアル化するサードパーティ クラスごとに包括的なラッパーを作成する必要がある場合、それは不可能だと思います。コードを他のアップストリームの変更と同期する必要があるライブラリは、それを使用するだけでは役に立ちません。

4

1 に答える 1