问题标签 [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.

0 投票
0 回答
159 浏览

c++ - 使用 boost proto 的符号微分

我正在尝试构建一个可以处理符号差异的 EDSL。我在功能方面遇到了麻烦。

在该结构的最后一部分中,我分别捕获函数,因为我希望能够传递除proto::_left要应用的函数之外的其他内容。

例如。proto::literal<function<2> >对应于 tanh 函数,我的上下文会将其评估为 tanh。但是当我在我的表达中看到 tanh 我想要在我的Derivative结构中的导数时,我想要能够说

proto::literal<function<7> >对应于tanh的梯度。

当我尝试这样做时,我的代码无法编译。

我怎样才能正确地做到这一点?

0 投票
0 回答
70 浏览

c++ - 评估 proto 表达式树

我正在尝试使用自定义定义的上下文评估原型表达式树。我有一个struct exp_tag {}使用它创建一个终端

我创建表达式树如下:

树看起来像这样

在我的上下文中,我使用这样的函数重载来评估树:

当我尝试exp_t 通过替换proto::tag::plusexp_tag我的代码来为我执行此操作时,不会编译。

我的猜测是,因为exp_t是一个表达式,因为proto::make_exr<exp_tag>我不能把它当作一个proto::tag,但我不知道该怎么做。

proto::tag::plus为了exp_t通过上下文进行评估,我应该用什么替换?

0 投票
1 回答
452 浏览

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)必须改变某些东西,但我缺乏这样做的技能。

0 投票
0 回答
43 浏览

c++ - 如何使用 boost::proto 将插槽连接到信号

我正在尝试创建一种嵌入式语言来将插槽连接到成员信号。我已经查看了 boost 网站上的示例和教程,但我仍然完全迷失了,我什至不确定我想做的事情是否可行。

例如,如果我有一个这样的类,并定义了一个原型终端:

我想知道如何将终端包装在一个表达式中,该表达式允许我_signal使用如下语法将插槽连接到:

或者,如果这是不可能的:

计算表达式的结果应该是信号connect()函数返回的连接。我希望我有更好的代码示例,但是我对 boost::proto 感到非常困惑,以至于我什至不知道从哪里开始。目标是保持信号成员的私密性,同时提供一种连接插槽的统一方式,而无需每次都编写新的连接函数。