我如何补充此代码,以便它不显示字段值,而是显示 json,例如:
'{"name":"John", "age":30}'
#include <iostream>
#include <string>
#include <boost/hana.hpp>
struct Person
{
BOOST_HANA_DEFINE_STRUCT(Person,
(std::string, name),
(int, age)
);
};
int main()
{
namespace hana = boost::hana;
auto serialize = [](std::ostream& os, const auto& object) {
hana::for_each(hana::members(object), [&](auto member) {
os << member << std::endl;
});
};
Person john{"John", 30};
serialize(std::cout, john);
return 0;
}
我不知道如何使用 hana 获取字段名称;文档中没有这样的示例。
我的尝试无法编译:
auto serialize2 = [](std::ostream& os, const auto& object) -> std::string {
std::string json = "{";
hana::for_each(object, [&json](auto pair) {
json += "\"" + hana::to<const char *>(hana::first(pair)) + "\":\"" + hana::second(pair) + "\"";
});
json += "}";
os << json;
return json;
};
错误:二进制表达式的操作数无效(“const char[2]”和“const char *”)
您正确获取了字段名称。
该错误消息与表达式表达式有关:
"\"" + hana::to<const char *>(hana::first(pair))
:旧的 Ce 字符串 (const char*
) 不支持字符串加法。为了进行附加工作,至少一个参数必须是 C++ 字符串 (std::string)。这是一个示例(仍然需要对文件进行大量整理): https://godbolt.org/z/jh66rsqEa
可能还有其他我没有考虑到的陷阱。