gpt4 book ai didi

c++ - 内省(introspection) C++ 中的结构定义?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:48 27 4
gpt4 key购买 nike

所以我正在研究一种文件格式,用于存储在某种范围内定义的结构化数据。最简单的例子是随时间变化的浮点值,但我将其设计为在每个点都允许多个维度和任意数据。我也想将数据结构存储在文件头中,因为它可以提供一些简洁的功能。

起初我以为我会让用户使用类的层次结构来构建他们的数据结构,所以你可以这样做:

pf_type data = record(PF_DOUBLE) (
record("position")(
field("xp") &
field("yp") &
field("zp")) &
record("velocity")(
field("xv") &
field("yv") &
field("zv")) &
record("acceleration")(
field("xa") &
field("ya") &
field("za")));

这相当于 C 中的这样的东西:

struct {
struct position {
double xp,yp,zp;
}
struct velocity {
double xv,yv,zv;
}
struct acceleration {
double xa,ya,za;
}
}

这并不可怕,但它仍然需要用户单独定义一个 c struct 才能在读取/写入数据时实际使用。

我认为如果他们可以只定义一个传递到我的库的常规 c 结构就很好了,我对其进行了内省(introspection)以获取要写入文件的信息。虽然我不知道在 C++ 中是否可以远程实现类似的东西。我的想法是,它可能使用了一些模板元编程魔法,但它会非常困惑。所以我想我应该向那些比我更了解 C++ 的人征求一些想法。

最佳答案

不是正是您正在寻找的东西,但可能是一个很好的灵感来源,Google's Protobufs .他们采用的方法与您在问题中讨论的方法略有不同。使用 protobuf,首先您在 .proto 文件中描述您的数据结构,然后是用于几种不同语言(包括 C++)之一的 protobuf 编译器 (protoc) codegens 样板代码。

代码生成的代码完全能够反射(reflect) .proto 文件中定义的结构,而 protobuf 最优化的是序列化二进制数据以通过网络发送。显然,您会付出一点性能损失,但它会为您带来一些非常高质量的反射,并且简单访问的性能损失并不是那么高。

本质上,您的库的客户可以向您传递一个填充的 protobuf。通过直接调用您,或通过网络调用。

关于c++ - 内省(introspection) C++ 中的结构定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4986198/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com