我正在使用spotify/json
将一些对象序列化为JSON。
其中一个对象具有enum class
字段。
该库有一个codec for the enumeration,但是它说“ default_codec支持:否;必须显式使用便捷构建器”,那么如何集成枚举字段的转换?
enum class LogLevel {...};
class LogEntry
{
public:
std::string node_name;
LogLevel level;
std::string message;
int64_t time_usec;
};
#include <spotify/json.hpp>
namespace spotify {
namespace json {
using T = LogEntry;
template <>
struct default_codec_t<T>
{
static codec::object_t<T> codec()
{
auto codec = codec::object<T>();
codec.required("node_name", &T::node_name);
codec.required("level", &T::level); // how to cast here?
codec.required("message", &T::message);
codec.required("time_usec", &T::time_usec);
return codec;
}
};
} // namespace json
} // namespace spotify
答案 0 :(得分:0)
我通过将level
字段声明为:
union {
LogLevel level;
int level_int;
};
并在编解码器中使用并集的int
部分:
codec.required("level", &LogEntry::level_int);