用例
#ifdef SINGLE_HEADER #include "cista.h" #else #include <fstream> #include "cista/reflection/member_index.h" #include "cista/serialization.h" #endif int main() { // 成员属性反射 struct test { int a, b, c; }; assert(0 == cista::member_index(&test::a)); assert(1 == cista::member_index(&test::b)); assert(2 == cista::member_index(&test::c)); // 文档数据定义 namespace data = cista::raw; struct DocDataV1 { int version_{1}; // 版本号 float x; // 基础类型 float y; data::string name; data::vector<int> v; // stl 容器 struct { // 嵌套 data::hash_map<data::string, data::string> m; // stl 容器 } j; data::unique_ptr<test> testPtr; // 指针 }; // 版本检测 struct version_detection { int version_{0}; }; DocDataV1 saveData; saveData.x = 0.1232312f; saveData.y = 100002.232323f; saveData.name = "hello"; saveData.v = {1, 2, 3}; saveData.j.m = {{"key", "value"}}; saveData.testPtr = data::make_unique<test>(0, 1, 2); auto buf = cista::serialize(saveData); // 保存到文件 std::ofstream ofs("test.bin", std::ios::binary | std::ios::out); ofs.write((char *)buf.data(), buf.size()); ofs.flush(); ofs.close(); // 从文件加载 std::ifstream ifs("test.bin", std::ios::binary | std::ios::in); //指针定位到文件末尾 ifs.seekg(0, std::ios::end); auto fileLength = ifs.tellg(); //指定定位到文件开始 ifs.seekg(0, std::ios::beg); cista::buf ibuf(std::vector<uint8_t>(fileLength, 0)); ifs.read((char *)ibuf.addr(0), fileLength); ifs.close(); // 版本检测,数据兼容 auto versionData = cista::unchecked_deserialize<version_detection>(ibuf); assert(versionData->version_ == 1); // 文档数据反序列化 auto loadData = cista::deserialize<DocDataV1>(buf); // 正确性测试 assert(saveData.version_ == loadData->version_); assert(saveData.x == loadData->x); assert(saveData.y == loadData->y); assert(saveData.name == loadData->name); assert(saveData.v == loadData->v); assert(saveData.j.m == loadData->j.m); assert(saveData.testPtr->a == loadData->testPtr->a); assert(saveData.testPtr->b == loadData->testPtr->b); assert(saveData.testPtr->c == loadData->testPtr->c); }参考
GitHub - felixguendling/cista: Cista is a simple, high-performance, zero-copy C++ serialization & reflection library.
C++ RPC ORM 高速解析-CSDN博客
C++类反射-CSDN博客