带有Spotify / json的枚举字段的编解码器

时间:2018-07-21 08:19:12

标签: c++ json

我正在使用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

1 个答案:

答案 0 :(得分:0)

我通过将level字段声明为:

union {
    LogLevel level;
    int level_int;
};

并在编解码器中使用并集的int部分:

codec.required("level", &LogEntry::level_int);