0

目标是将提供的 C++ 结构转换为键结构。邦德支持吗?

否则是否有任何好的示例可用于将 C++ 结构一般转换为已编译的键结构?我更愿意集中这个逻辑,而不是为每个键结构创建自定义转换。

4

1 回答 1

1

如果您可以为非Bond 生成的结构提供专门bond::schema<T>化,这将提供足够的关于非Bond 结构的编译时元数据,以便可以在非Bond 生成的结构上调用许多Bond API,例如transforms API . 例如,序列化std::tuple<T...>是通过专门化来实现的bond::schema<std::tuple<T...>>

C++ 还没有——还没有——对结构进行编译时反射。有多种模拟方法(例如,Boost::Fusion、基于宏的方案、代码生成工具)。Bond 的 C++ 代码生成的很大一部分是添加库稍后使用的编译时模式。

如果 C++ 结构和 Bond 生成的 C++ 结构具有兼容的布局并且两者都是可简单复制的,则可以使用std::memcpy“通过复制强制转换”到 Bond 生成的结构,然后根据需要操作 Bond 结构。我会将此类行为包装在一个辅助方法中,并进行大量static_assert检查,以避免随着结构的发展而出现未定义的行为。这仅适用于非常受限制的结构形状:例如,集合字段可能会使结构不可复制。您需要使用 8.x 或更高版本的 Bond 和最新版本的 C++ 编译器才能生成的 Bond 结构甚至完全可以轻松复制。(请参阅提交fa02289f,它删除了许多非默认 ctor。)

于 2018-10-16T01:33:58.847 回答