MerlinStructs 是一个用于生成 C++ 代码的工具,它能够根据用户提供的 YAML 文件中定义的数据结构,自动生成符合 C++ 命名规范的数据类代码。同时,它也提供了反射和序列化的支持,使得用户能够更加便捷地操作这些数据类对象。
MerlinStructs 提供了以下功能:
-
使用 YAML 格式定义数据结构:用户可以通过简单的 yaml 文件定义数据类的字段、类型、名称、注释等信息。
-
生成 C++ 代码:MerlinStructs 能够根据定义文件自动生成 C++ 的数据类代码。所有代码都符合 C++ 命名规范,包括成员变量的命名、函数名的命名等。
-
反射支持:MerlinStructs 可以生成反射信息,使得用户能够更加便捷地访问数据类中的成员变量。
-
序列化支持:MerlinStructs 使用 msgpack 库实现了数据类的序列化和反序列化支持,用户能够更方便地在不同的平台之间进行数据传输。
- C++11
- YAML-CPP
- msgpack-c
-
使用 YAML 定义数据结构
- name: user fields: - {name: id, type: int32, comment: 用户 ID} - {name: name, type: string, comment: 用户名字} - {name: age, type: int8, comment: 用户年龄}
-
运行 MerlinStructs 工具
$ merlinstructs --input-file=user.yaml --output-dir=output/
-
在输出目录中查看生成的代码
// user.h #pragma once #include <string> #include <msgpack.hpp> class User { public: User() {} ~User() {} int32_t getId() const { return m_id; } void setId(int32_t value) { m_id = value; } const std::string &getName() const { return m_name; } void setName(const std::string &value) { m_name = value; } int8_t getAge() const { return m_age; } void setAge(int8_t value) { m_age = value; } MSGPACK_DEFINE(m_id, m_name, m_age); private: int32_t m_id; std::string m_name; int8_t m_age; };
// user.inl #pragma once #include "user.h" #include <merlinstructs/reflection.h> namespace MerlinStructs::Reflection { template<> const std::vector<FieldInfo> GetClassFields<User>() { return { { "id", &User::getId, &User::setId }, { "name", &User::getName, &User::setName }, { "age", &User::getAge, &User::setAge }, }; } }
MerlinStructs 是一个方便快捷的工具,它可以帮助用户迅速生成符合规范的 C++ 代码,并提供了反射和序列化的支持。期望这个工具可以帮助大家提高开发效率,欢迎使用和反馈。