使用C ++ 14我想为msgpack定义可选参数。
现在我有这样的事情:MSGPACK_DEFINE(varA, varB, varC);
,其中每个变量都是可选的,并且会根据我想要打包的特定类型进行更改。例如,一种类型的对象需要varA和varC,但不需要varB。
有没有一种干净的方法可以在一个班级中完成这一切?
答案 0 :(得分: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