在c++ 14中使用MSGPACK_DEFINE定义可选参数
Defining optional parameters using MSGPACK_DEFINE in C++14
使用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
相关文章:
- 找不到 #define 的函数定义
- 初始化在类类型 #define 中定义的非静态成员数组,不带默认 ctor
- #define DATA 10 和 # (如果定义了 DATA)之间的差异
- 已经在 .obj 中定义,即使有 #ifndef #define #endif
- 如何比较 #define 定义的字符串和整数
- 如何将定义(#define some_define)作为函数的参数传递
- 如何使用'#define';定义一个宏来执行多个方法
- 是否可以为 #define 分配定义的结果?
- 当定义与运算符有价值时,#define 如何在编程中工作
- 在运行时重新定义 c++ 中的 #define
- #Define USE_SQLDB(定义(USE_SQLITE)||定义(USE_MYSQL))
- 使用来自其他方法和 #define 的函数定义常量
- #define变量在windows.h中被忽略并重新定义
- 在cpp中用#define定义函数
- 重新定义(#define)保留的c++关键字
- 使用 #define 来定义静态数组的大小是否合法?
- g++链接错误:使用#define编写函数名称时,未定义对函数的引用
- 定义类型的正确方式(typedef与#define)
- 在 #define 中定义的最大值无法正常工作
- 使用 #undefine 而不首先定义 (#define) 宏的效果