问题标签 [boost-phoenix]

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 回答
495 浏览

c++ - Boost Phoenix 中的用户定义参数

0 投票
1 回答
564 浏览

c++ - 转换 Boost C++ Phoenix 表达式树

在 Boost Phoenix 文章“转换表达式树”中,这里使用了一组自定义invert_actions类的特化,用于反转二进制算术表达式。例如a+b变成a-b; a*b变成a/b; 反之亦然。

这涉及表达式树的递归遍历 - 但是,当遇到涉及未显式处理的运算符的表达式时,此遍历​​停止。例如,_1+_2-_3将变为_1-_2+_3,但_1+_1&_2将保持原样(没有处理程序&)。let(_a = 1, _b = 2) [ _a+_b ]也将保持不变。

我原以为这与文章的意图一致,但看看最后列出的测试,我发现这种if_(_1 * _4)[_2 - _3]情况预计会发生变化;使用提供的代码(此处),我发现它没有。

那么如何定义一个通用的 Boost Phoenix 表达式树变换,它适用于所有一组显式列出的(n 元)运算符;保持其他不变?

一些代码可能有用。我希望输出以下 C++11 代码(自动)0,而不是2没有明确处理&, 或任何其他运算符/语句。

0 投票
1 回答
320 浏览

c++ - 使用 Boost Fusion 显示扁平化的 Phoenix 表达式

0 投票
1 回答
406 浏览

c++ - 在 Boost Phoenix 表达式中转换函数体

如何在 Boost Phoenix 表达式的转换中也包含函数体?

例如,我在Boost Phoenix Starter Kit的 Lazy Functions 部分构建,并创建了一个惰性添加函数:

然后,我从上一个问题准备一个简单的正负转换,如下所示:

但是,当我使用 , 对其参数应用一个倒置的 Phoenixlambda表达式时,my_add如下所示,似乎没有实现预期的倒置。有没有推荐的方法在 Phoenix 中实现函数调用,可以促进这种转换?

0 投票
1 回答
1140 浏览

c++ - 不能 phoenix::bind qi::_val 与 boost 1.53(回归?)

下面的代码,使用 boost::spirit,用于使用 boost 1.44 和 boost 1.49:

我将 boost 更新到 1.53 版,但现在这段代码不再编译了。g++ 抱怨

我不知道如何解决它。以下代码编译:

所以我想问题出在 qi::val_... boost::spirit 的 API 是否改变了,还是我缺少包含文件?

我正在使用 g++4.7,带有--std=c++0x。

在这里,我尝试了一个小测试用例来重现问题。错误消息不一样(但它仍然很大!),但再次引用运算符似乎是问题所在。

0 投票
1 回答
376 浏览

c++ - 创建一个凤凰功能用于精神规则

我正在尝试编译下面的代码,但是,像往常一样,spirit/phoenix 的错误并没有提供很多关于什么是错误的线索。谁能看到问题是什么?

0 投票
1 回答
1084 浏览

c++ - 被boost精神/凤凰/C++11交互弄糊涂了

我尽量减少这个问题。

如果我取消注释void initialize(),则此代码将编译。如果我将其注释掉,则它不会构建。

我发现解决此问题的唯一方法是使用 C++03 模式构建,boost::shared_ptr而不是std::shared_ptr.

我曾尝试使用 OS X Lion 上的股票 clang 编译器(使用 libc++)和 CentOS 6.4 x64 上的以下编译器:

像往常一样,spirit 的编译器输出非常冗长,因此我将其作为要点包含在内:

代码如下...

0 投票
1 回答
297 浏览

c++ - Boost C++ Phoenix 用户定义参数的下标运算符 [] 错误

使用现有的 Boost Phoenix(占位符)参数,例如_1,我可以使用数组/下标运算符。例如,以下摘录将显示一个1.

但是,如果我定义自己的占位符参数:

尽管它可以正常工作(以下输出为 7):

如果我尝试使用下标运算符(如上):

我收到很多错误;总之,使用 G++ 4.7.2,模板参数推导失败;使用 Clang 3.2,我被告知函数不能返回数组类型。

如何使我的 Phoenix 占位符参数支持下标运算符?

0 投票
2 回答
325 浏览

c++ - 我可以对 Boost Phoenix 表达式进行字符串化吗?

我可以将 Boost Phoenix 表达式转换为具有代表性的 C++ 字符串吗?我本可以有:

然后可能会生成一个包含以下内容的字符串:

我很欣赏这个例子有一些粗糙的边缘,但我想知道是否已经尝试过这些方面的任何事情?

0 投票
2 回答
972 浏览

c++ - 从 boost::phoenix::lambda 中调用函数

我正在尝试在boost::phoenix缺乏 C++11 支持的旧编译器上模拟 C++ lambda 表达式,并且我无法从 lambda 表达式中调用简单函数。

C++11 版本:

我的 Phoenix Lambda 代码如下:

这会产生以下编译器错误:

如何从 Phoenix lambda 表达式中调用函数?

我希望能够以phoneix::lambdas与过去使用 C++11 lambda 相同的方式使用,例如: