2016-09-10 6 views
0

C++を使用する14 msgpackにオプションのパラメータを定義したいとします。C++でMSGPACK_DEFINEを使用してオプションのパラメータを定義する14

今私はMSGPACK_DEFINE(varA, varB, varC);のようなものを持っています。これらの変数はそれぞれオプションで、パックしようとしている特定のタイプに変更されています。たとえば、あるタイプのオブジェクトはvarAとvarCが必要ですが、varBは必要としません。

これをすべて1つのクラスで行うには、きれいな方法がありますか?

+0

'MSGPACK_DEFINE'は何ですか?マクロ? –

+1

@NicolBolas https://github.com/msgpack/msgpack-c/wiki/v2_0_cpp_adaptor#defining-custom-adaptors – kennytm

答えて

0

@kennytmさんのコメントは答えになりました。

私はあなたのケースに基づいて完全な作業コードの例に答えています。 MSGPACK_DEFINE_MAPはマップベースのシリアル化を提供します。そのため、適応したいメンバー変数を選択することができます。また、次のオンラインコンパイラ上記のコードを実行することができます

#include <iostream> 
#include <sstream> 
#include <msgpack.hpp> 

struct S1 { 
    int varA; 
    int varB; 
    int varC; 
    MSGPACK_DEFINE_MAP(varA, varB, varC); 
}; 

struct S2 { 
    int varA; 
    int varC; 
    MSGPACK_DEFINE_MAP(varA, varC); 
}; 


int main() { 
    S1 s1 { 1, 2, 3}; 
    std::stringstream ss; 
    msgpack::pack(ss, s1); 
    auto oh = msgpack::unpack(ss.str().data(), ss.str().size()); 
    auto s2 = oh.get().as<S2>(); 
    std::cout << s2.varA << "," << s2.varC << std::endl; 
} 

http://melpon.org/wandbox/permlink/NbaSjMPdtdwqBp7m

関連する問題