2016-09-10 2 views
0

Использование C++ 14 Я хочу определить дополнительные параметры для msgpack.Определение необязательных параметров с использованием MSGPACK_DEFINE в C++ 14

Прямо сейчас у меня есть что-то вроде этого: MSGPACK_DEFINE(varA, varB, varC);, где каждая из этих переменных является необязательной и изменяется с определенным типом, который я пытаюсь упаковать. Например, для одного типа объектов нужны varA и varC, но не varB.

Есть ли чистый способ сделать это все в одном классе?

+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