之前依赖 rapidjson 写过结构体转 json 的工具,使用的方法主要是手动往结构体里加可变参数的宏,然后使用__VA_ARGS__
进行成员遍历与赋值,具体的宏如下代码。
但这会破坏原有的结构体,就想能不能在结构体外面进行注册。想问下有没有什么好的办法?
/******************************************************
* Register class or struct members
* eg:
* struct Test
* {
* string A;
* string B;
* AIGC_JSON_HELPER(A, B)
* };
******************************************************/
#define AIGC_JSON_HELPER(...) \
std::map<std::string, std::string> __aigcDefaultValues; \
bool AIGCJsonToObject(aigc::JsonHelperPrivate &handle, \
rapidjson::Value &jsonValue, \
std::vector<std::string> &names) \
{ \
std::vector<std::string> standardNames = handle.GetMembersNames(#__VA_ARGS__); \
if (names.size() <= standardNames.size()) \
{ \
for (int i = names.size(); i < (int)standardNames.size(); i++) \
names.push_back(standardNames[i]); \
} \
return handle.SetMembers(names, 0, jsonValue, __aigcDefaultValues, __VA_ARGS__); \
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.