问题标签 [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.
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
;没有明确处理&
, 或任何其他运算符/语句。
c++ - 在 Boost Phoenix 表达式中转换函数体
如何在 Boost Phoenix 表达式的转换中也包含函数体?
例如,我在Boost Phoenix Starter Kit的 Lazy Functions 部分构建,并创建了一个惰性添加函数:
然后,我从上一个问题准备一个简单的正负转换,如下所示:
但是,当我使用 , 对其参数应用一个倒置的 Phoenixlambda
表达式时,my_add
如下所示,似乎没有实现预期的倒置。有没有推荐的方法在 Phoenix 中实现函数调用,可以促进这种转换?
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。
在这里,我尝试了一个小测试用例来重现问题。错误消息不一样(但它仍然很大!),但再次引用运算符似乎是问题所在。
c++ - 创建一个凤凰功能用于精神规则
我正在尝试编译下面的代码,但是,像往常一样,spirit/phoenix 的错误并没有提供很多关于什么是错误的线索。谁能看到问题是什么?
c++ - Boost C++ Phoenix 用户定义参数的下标运算符 [] 错误
使用现有的 Boost Phoenix(占位符)参数,例如_1
,我可以使用数组/下标运算符。例如,以下摘录将显示一个1
.
但是,如果我定义自己的占位符参数:
尽管它可以正常工作(以下输出为 7):
如果我尝试使用下标运算符(如上):
我收到很多错误;总之,使用 G++ 4.7.2,模板参数推导失败;使用 Clang 3.2,我被告知函数不能返回数组类型。
如何使我的 Phoenix 占位符参数支持下标运算符?
c++ - 我可以对 Boost Phoenix 表达式进行字符串化吗?
我可以将 Boost Phoenix 表达式转换为具有代表性的 C++ 字符串吗?我本可以有:
然后可能会生成一个包含以下内容的字符串:
我很欣赏这个例子有一些粗糙的边缘,但我想知道是否已经尝试过这些方面的任何事情?
c++ - 从 boost::phoenix::lambda 中调用函数
我正在尝试在boost::phoenix
缺乏 C++11 支持的旧编译器上模拟 C++ lambda 表达式,并且我无法从 lambda 表达式中调用简单函数。
C++11 版本:
我的 Phoenix Lambda 代码如下:
这会产生以下编译器错误:
如何从 Phoenix lambda 表达式中调用函数?
我希望能够以phoneix::lambdas
与过去使用 C++11 lambda 相同的方式使用,例如: