可以将C ++结构转换为Microsoft Bond结构吗?

时间:2018-10-13 07:18:33

标签: c++ struct bond

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

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

1 个答案:

答案 0 :(得分:1)

如果您可以为非绑定生成的结构提供bond::schema<T>的特殊化,那么​​它将为非绑定结构提供足够的编译时元数据,因此可以在非绑定结构上调用许多Bond API。绑定生成的结构,例如transforms API。例如,serialization of std::tuple<T...>是通过专门化bond::schema<std::tuple<T...>>来实现的。

C ++(yet)没有针对结构的编译时反射。有多种模拟方式(例如,Boost::Fusion,基于宏的方案,代码生成工具)。 Bond的C ++代码生成的很大一部分是添加compile-time schema,该库以后使用。

如果C ++结构和Bond生成的C ++结构具有兼容的布局,并且两者均为trivially copyable,则可以使用std::memcpy来“复制复制”到Bond生成的结构,然后根据需要操纵Bond结构。我会将这种行为包装在辅助方法中,并进行大量的static_assert检查,以免在结构演变时出现不确定的行为。这仅适用于非常受约束的结构形状:例如,收集字段可能会使该结构不可平凡地复制。您需要使用8.x或更高版本的Bond以及C ++编译器的最新版本来生成所生成的Bond结构,以便甚至可以完全复制。 (请参阅提交fa02289f,其中删除了许多非默认的ctor。)