使用 Boost Spirit X3 合成智能指针
Synthesize to smart pointers with Boost Spirit X3
我需要解析一个复杂的AST,这个AST不可能分配在堆内存上,而且AST节点必须支持多态。一种解决方案是使用智能指针分配 AST 节点。
为了简化问题,我将如何合成以下结构(std::unique_ptr<GiantIntegerStruct> giantIntegerStruct
),例如使用 Boost Spirit X3?
struct GiantIntegerStruct {
std::vector<unique_ptr<int>> manyInts;
}
我的初步解决方案是使用语义动作。有其他选择吗?
您可以执行语义操作,也可以为自定义类型定义特征。但是,请参阅此处 (尤其是那里的两个链接)- 基本上,请考虑不这样做。
I need to parse a complex AST, and it would be impossible to allocate this AST on heap memory
这个有点令人困惑的陈述让我得出一个合乎逻辑的结论,即您只需要从共享内存段分配即可。
本着 Rule Of Zero 的良好旧精神,您可以制作一个值包装器,使用您喜欢的任何方法进行分配,并且仍然享受 "value semantics" 的自动属性传播(这将仅作为服务"handles" 对于共享内存中的实际对象)。
如果您需要任何帮助来设置此设置,请随时 post 提出一个新问题。
我需要解析一个复杂的AST,这个AST不可能分配在堆内存上,而且AST节点必须支持多态。一种解决方案是使用智能指针分配 AST 节点。
为了简化问题,我将如何合成以下结构(std::unique_ptr<GiantIntegerStruct> giantIntegerStruct
),例如使用 Boost Spirit X3?
struct GiantIntegerStruct {
std::vector<unique_ptr<int>> manyInts;
}
我的初步解决方案是使用语义动作。有其他选择吗?
您可以执行语义操作,也可以为自定义类型定义特征。但是,请参阅此处
I need to parse a complex AST, and it would be impossible to allocate this AST on heap memory
这个有点令人困惑的陈述让我得出一个合乎逻辑的结论,即您只需要从共享内存段分配即可。
本着 Rule Of Zero 的良好旧精神,您可以制作一个值包装器,使用您喜欢的任何方法进行分配,并且仍然享受 "value semantics" 的自动属性传播(这将仅作为服务"handles" 对于共享内存中的实际对象)。
如果您需要任何帮助来设置此设置,请随时 post 提出一个新问题。