【问题标题】:Synthesize to smart pointers with Boost Spirit X3使用 Boost Spirit X3 合成智能指针
【发布时间】:2020-04-10 17:11:47
【问题描述】:

我需要解析一个复杂的 AST,不可能在堆内存上分配这个 AST,而且 AST 节点必须支持多态性。一种解决方案是使用智能指针分配 AST 节点。

为了简化问题,我将如何合成以下结构 (std::unique_ptr<GiantIntegerStruct> giantIntegerStruct),例如 Boost Spirit X3?

struct GiantIntegerStruct {
    std::vector<unique_ptr<int>> manyInts; 
}

我的暂定解决方案是使用语义动作。有其他选择吗?

【问题讨论】:

    标签: boost boost-spirit boost-spirit-x3


    【解决方案1】:

    您可以执行语义操作,也可以为自定义类型定义特征。但是,请参阅此处Semantic actions runs multiple times in boost::spirit parsing(尤其是那里的两个链接)-基本上,请考虑不要这样做。

    我需要解析一个复杂的 AST,不可能在堆内存上分配这个 AST

    这个有点令人困惑的陈述使我得出一个合乎逻辑的结论,即您只需要从共享内存段进行分配。

    本着 Rule Of Zero 的良好旧精神,您可以创建一个值包装器,使用您喜欢的任何方法进行分配,并且仍然可以享受具有“值语义”的自动属性传播(这将仅作为共享内存中的实际对象)。

    如果您在进行此设置时需要任何帮助,请随时发布新问题。

    【讨论】:

    • 嗨@sehe,我想我忘了提到我也想要多态性(已编辑)。从这篇文章stackoverflow.com/a/23301519/1404614 我将如何使用 X3 支持 unique_ptrmove,以及如何使用 variant 作为替代方案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多