问题标签 [boost-proto]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 使用 boost proto 的符号微分
我正在尝试构建一个可以处理符号差异的 EDSL。我在功能方面遇到了麻烦。
在该结构的最后一部分中,我分别捕获函数,因为我希望能够传递除proto::_left
要应用的函数之外的其他内容。
例如。proto::literal<function<2> >
对应于 tanh 函数,我的上下文会将其评估为 tanh。但是当我在我的表达中看到 tanh 我想要在我的Derivative
结构中的导数时,我想要能够说
proto::literal<function<7> >
对应于tanh的梯度。
当我尝试这样做时,我的代码无法编译。
我怎样才能正确地做到这一点?
c++ - 评估 proto 表达式树
我正在尝试使用自定义定义的上下文评估原型表达式树。我有一个struct exp_tag {}
使用它创建一个终端
我创建表达式树如下:
树看起来像这样
在我的上下文中,我使用这样的函数重载来评估树:
当我尝试exp_t
通过替换proto::tag::plus
为exp_tag
我的代码来为我执行此操作时,不会编译。
我的猜测是,因为exp_t
是一个表达式,因为proto::make_exr<exp_tag>
我不能把它当作一个proto::tag
,但我不知道该怎么做。
proto::tag::plus
为了exp_t
通过上下文进行评估,我应该用什么替换?
c++ - 切换到更高的 Boost 版本 1.6.1 导致编译错误
我将 Boost 版本从 1.6.1 切换到 >=1.6.2,但我的boost::spirit
解析器代码无法编译。实际上,我认为这个问题与从 1.6.1 版到 1.6.2 版的 Boost Variant 中的错误修复有关。
版本 1.6.2 的发行说明说:
Variant constructors and assignment operators now do not participate in overload resolutions if variant can not hold the input type #5871, #11602
这是我的失败代码的剥离版本:
解析器.h
解析器.cpp
该代码在 1.6.1 版中编译没有问题,但在 1.6.2 版中编译失败并出现以下错误:
.../proto/transform/default.hpp(154): error C2679: Binary operator "=": ...
computationExpr
我猜在版本 1.6.1 中有一个从to的隐式转换expr
,这不再被允许。
如何修复此代码?我认为_val = construct<Acc>(_1)
必须改变某些东西,但我缺乏这样做的技能。
c++ - 如何使用 boost::proto 将插槽连接到信号
我正在尝试创建一种嵌入式语言来将插槽连接到成员信号。我已经查看了 boost 网站上的示例和教程,但我仍然完全迷失了,我什至不确定我想做的事情是否可行。
例如,如果我有一个这样的类,并定义了一个原型终端:
我想知道如何将终端包装在一个表达式中,该表达式允许我_signal
使用如下语法将插槽连接到:
或者,如果这是不可能的:
计算表达式的结果应该是信号connect()
函数返回的连接。我希望我有更好的代码示例,但是我对 boost::proto 感到非常困惑,以至于我什至不知道从哪里开始。目标是保持信号成员的私密性,同时提供一种连接插槽的统一方式,而无需每次都编写新的连接函数。