如何添加对 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 指针。
我想生成具有从子项到父项的 "reverse" 引用的表达式树。有没有办法自定义 Proto 生成器或域,以便表达式包装器 class(使用 proto::extends<>
)包含对父表达式的引用?
这背后的目标是创建缓存评估结果的表达式树,以便可以有效地重新评估它们。我的策略是更新终端值,然后沿着树向上移动,将父节点标记为 "dirty",以便在计算根表达式时重新计算它们。
您描述的技术无效。表达式已构建 bottom-up。对于表达式 a + (b * c)
,parent 节点(+
)在构造 child 节点(b * c
)时不存在。 child 无法存储指向尚不存在的 object 的指针。
您必须 post-process 表达式才能使用转换或上下文设置 parent 指针。