我需要解析一个复杂的AST,在堆内存上分配这个AST是不可能的,而且AST节点必须支持多态性。一种解决方案是使用智能指针分配AST节点。
为了简化这个问题,我将如何合成下面的结构(std::unique_ptr<GiantIntegerStruct> giantIntegerStruct),例如Boost Spirit X3?
struct GiantIntegerStruct {
std::vector<unique_ptr<int>> manyInts;
}我的试探性解决方案,是使用语义动作。还有别的选择吗?
发布于 2020-04-10 18:12:25
您可以执行语义操作,也可以为自定义类型定义特征。但是,请参见这里的语义操作多次运行在boost::spirit解析中。 (特别是其中的两个链接)--基本上,请考虑不要这样做。
我需要解析一个复杂的AST,在堆内存中分配这个AST是不可能的
这个有点混乱的语句使我得出了一个逻辑结论,即您只需要从共享内存段分配。
本着零规则的良好旧精神,您可以制作一个值包装器,它可以使用您喜欢的任何方法进行分配,并且仍然可以使用“值语义”(它仅作为共享内存中的实际对象的“句柄”)进行自动属性传播。
如果你需要任何帮助来设置这个问题,可以随时发布一个新的问题。
https://stackoverflow.com/questions/61145216
复制相似问题