在c++ 14中使用MSGPACK_DEFINE定义可选参数

Defining optional parameters using MSGPACK_DEFINE in C++14

本文关键字:定义 DEFINE 参数 MSGPACK c++      更新时间:2023-10-16

使用c++ 14,我想为msgpack定义可选参数。

现在我有这样的东西:MSGPACK_DEFINE(varA, varB, varC);,其中每个变量都是可选的,并且随着我试图打包的特定类型而变化。例如,一种类型的对象需要varA和varC,但不需要varB。

是否有一种干净的方法在一个类中完成所有这些?

@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