如何添加对 Boost.Proto 表达式的父引用?

How can I add parent references to Boost.Proto expressions?

我想生成具有从子项到父项的 "reverse" 引用的表达式树。有没有办法自定义 Proto 生成器或域,以便表达式包装器 class(使用 proto::extends<>)包含对父表达式的引用?

这背后的目标是创建缓存评估结果的表达式树,以便可以有效地重新评估它们。我的策略是更新终端值,然后沿着树向上移动,将父节点标记为 "dirty",以便在计算根表达式时重新计算它们。

您描述的技术无效。表达式已构建 bottom-up。对于表达式 a + (b * c),parent 节点(+)在构造 child 节点(b * c)时不存在。 child 无法存储指向尚不存在的 object 的指针。

您必须 post-process 表达式才能使用转换或上下文设置 parent 指针。