2012-02-17 1 views
1

msgpack에 대한 C++ 빠른 시작 안내서를 살펴 보았습니다.C++ msgpack 사용자 정의 클래스 - 시작할 수 없습니다.

#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의 객체의 벡터를 직렬화 할 :이

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

는 다음과 같은 코드가있다.

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

... 

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

을하지만이 작동하지 않습니다 ("오류 : 호출에 대해 전혀 일치")

또한, 내가 할 경우 :

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

나는 다음을 시도했습니다

str1 및 str2는 private이므로 작동하지 않습니다.

이 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
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); 
}