2012-02-17 4 views
1

私は、msgpackのC++クイックスタートガイドを見てきました。そこC++ msgpackユーザ定義クラス - 起動できません

http://wiki.msgpack.org/pages/viewpage.action?pageId=1081387

、次のコードスニペットがあります:

#include <msgpack.hpp> 
#include <vector> 
#include <string> 

class myclass { 
private: 
    std::string str1; 
    std::string str2; 
public: 
    MSGPACK_DEFINE(str1,str2); 
}; 

int main(void) { 
     std::vector<myclass> vec; 
     // add some elements into vec... 
     ///// 
     /* But what goes here??? */ 
     ///// 

     // you can serialize myclass directly 
     msgpack::sbuffer sbuf; 
     msgpack::pack(sbuf, vec); 

     msgpack::unpacked msg; 
     msgpack::unpack(&msg, sbuf.data(), sbuf.size()); 

     msgpack::object obj = msg.get(); 

     // you can convert object to myclass directly 
     std::vector<myclass> rvec; 
     obj.convert(&rvec); 
} 

私はMyClassのオブジェクトのベクトルをシリアル化します。

私は次のことを試してみた:

... 
vector<myclass> rb; 
myclass mc; 

... 

int main(){ 
    ... 
    mc("hello","world"); 
    rb.push_back(mc) 
    ... 
} 

しかし、これは、( "エラー:呼び出しのための不一致")は動作しません私がしなければ、また

を:

mc.str1="hello" 
mc.str2="world" 

それはstr1とstr2がプライベートなので動作しません。

このMSGPACK_DEFINE(...)マクロを正しく使用するには?私はオンラインで何かを見つけることができません。

多くのおかげで、

+0

http://msgpack.sourcearchive.com/documentation/0.5.4-1/msgpack__test_8cpp-source.html may help;) – tuergeist

答えて

0

MSGPACK_DEFINE(は)いくつかのメソッドのパッキングを実装して、クラスの開梱を定義します。 ()の中に入れるものは、直列化したいメンバーのリストです。

その後、intをパックまたはアンパックするのと同じように、クラスをパックして解凍することができます。したがって、この例は機能しているはずです。

ベクトルを削除して1つのオブジェクトのみをパックしてみることができます。単純化すると思います。

1
class myclass { 
    private: 
     std::string str1; 
     std::string str2; 
    public: 
     myclass(){}; 
     myclass(string s1,string s2):str1(s1),str2(s2){}; 
     MSGPACK_DEFINE(str1,str2); 
}; 

int main(int argc, char **argv) 
{ 
    std::vector<myclass> vec; 
    myclass m1("m1","m2"); 
    vec.push_back(m1); 

    // you can serialize myclass directly 
    msgpack::sbuffer sbuf; 
    msgpack::pack(sbuf, vec); 

    msgpack::unpacked msg; 
    msgpack::unpack(&msg, sbuf.data(), sbuf.size()); 

    msgpack::object obj = msg.get(); 

    // you can convert object to myclass directly 
    std::vector<myclass> rvec; 
    obj.convert(&rvec); 
} 
関連する問題