1
ugpu 2023-02-21 19:56:30 +08:00
auto ptr = &struct
send_buff(&ptr, len(struct)) ???? 类似这样 最基础的 |
7
bfjm OP 有 protobuf 可以用 我在知乎上看评论 protobuf 可以实现反射 有人指路一下吗 具体一点
|
8
polythene 2023-02-21 20:14:51 +08:00
编译期反射 14/17 都不支持吧,pb 能做到是因为它能从 IDL 文件里拿到字段的偏移量,而不是靠编译期反射吧
|
9
Jiavwen 2023-02-21 22:26:57 +08:00
必然有个元数据记录 struct 中每个元素的首地址和偏移量啊
|
10
boboliu 2023-02-21 22:38:46 +08:00
pb 是自己 IDL + codegen 来的
你要反射的话就只能自己组织元数据了,比如 https://github.com/netcan/recipes/blob/master/cpp/metaproggramming/reflection/StaticRefl.cpp |
11
kevinlq 2023-02-21 22:53:21 +08:00
建议先学习第三方库如何使用、再研究如何实现的,最后如果想自己造轮子再试着撸一个。
可以看看 protobuf ,msgpack 啊这些, 也可以看看 Qt 的元对象实现 |
12
GeruzoniAnsasu 2023-02-21 23:31:56 +08:00
啊? 序列化结构体
boost::serialization |
13
mingl0280 2023-02-22 04:00:42 +08:00 via Android
结构体是 POD 的:头文件直接转 char 或者 unsigned char 。
非 POD 的:头文件+序列化 /反序列化函数 |
14
mingl0280 2023-02-22 04:02:00 +08:00 via Android
要获取成员涉及到一些模板元编程的东西,你现在没必要研究这个
|
15
786375312123 2023-02-22 04:51:37 +08:00
编译期知道结构体有哪些成员对象?
太难了,你连编译期间 enum 里有那些成员都没法弄清楚,还需要写一个标记开头结尾。 就这么看编译期间想知道类里有什么根本做不到,除非这个类是模板类?模板类能做到么?我没试过。 |
16
xy629 2023-02-22 05:48:05 +08:00
#include <iostream>
#include <fstream> #include <sstream> #include <string> #include <vector> #include <cstdlib> #include <stdexcept> #include <boost/archive/text_iarchive.hpp> #include <boost/archive/text_oarchive.hpp> #include <boost/archive/binary_iarchive.hpp> #include <boost/archive/binary_oarchive.hpp> struct MyStruct { int i; double d; std::string s; // 序列化成文本格式 template <class Archive> void serialize(Archive & ar, const unsigned int version) { ar & i; ar & d; ar & s; } }; int main() { // 将结构体序列化为二进制格式并写入文件 { MyStruct s{42, 3.14, "hello world"}; std::ofstream ofs("data.bin", std::ios::binary); boost::archive::binary_oarchive oa(ofs); oa << s; } // 从文件中读取二进制数据并反序列化为结构体 { MyStruct s; std::ifstream ifs("data.bin", std::ios::binary); boost::archive::binary_iarchive ia(ifs); ia >> s; // 验证反序列化结果是否正确 if (s.i != 42 || s.d != 3.14 || s.s != "hello world") { throw std::runtime_error("Deserialization failed"); } } return 0; } |
17
AlohaV2 2023-02-22 08:49:19 +08:00
感觉可以看一下 protobuf
|
18
blinue 2023-02-22 08:55:53 +08:00
不追求安全性的话可以看一下 https://github.com/niXman/yas
最大的优点是唯头文件,速度也很快。 |
19
bfjm OP 用 boost 的序列化库解决了
|
21
alqaz 2023-03-01 21:11:34 +08:00
可以试试 iguana
|