问题标签 [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 投票
1 回答
346 浏览

c++ - boost::phoenix::function 的问题

使用boost::phoenix::function我遇到了一些问题。据我所知,这个惰性函数需要仿函数作为它的模板参数。我必须定义一个仿函数类/结构,然后将其作为模板参数传递以进行实例化。但它太长而且多余。我可以使用其他一些可调用类型进行phoenix::function创建(函数引用/指针等)吗?我试过lambdas

但调用lazy()没有编译。那么问题是有没有替代函子类来快速创建单行phoenix::function代码?

0 投票
1 回答
152 浏览

c++ - 使用 boost::phoenix 适配一个 BOOST_CHECK 宏

在使用 c++ 11 进行测试期间,我使用了以下构造:

我目前正在研究一个不使用 C++11 的项目,我是否正在寻找一种方法来生成类似的 lambda 表达式,而不必创建单独的函数/仿函数。

我了解boost::phoenix创建 lambda 的基本用法,但我想不出一种方法来创建能够调用boost::test宏的 phoenix lambda。

我能想到的最好的是:

不幸的是,这种方法会丢失检查失败的行号信息,因为宏 BOOST_CHECK_EQUAL 报告的是宏的行号,而不是std::for_each调用的行号。

有没有更好的方法来创建涉及使用“boost::phoenix”的宏调用的 lambda?

0 投票
1 回答
249 浏览

c++ - 为什么这个 proto/phoenix 玩具示例会崩溃?

我正在试验 proto 和 phoenix,我的第一个玩具示例崩溃是什么,我不知道应该在哪里看。由于#boost IRC 频道上的某个人告诉我要确保首先深度复制 phoenix 表达式树(以便在构造时没有悬空引用x),因此我将表达式包装为boost::proto::deep_copy. 然而,这并不完全奏效-O2使用标志编译时它仍然崩溃,并且在省略它时工作正常

我希望这能输出hellobye

0 投票
1 回答
1334 浏览

c++ - 使用 boost::phoenix::bind 和 boost::spirit::qi::symbols::add

我想解析文本文件中的浮点数并将其插入符号表中;解析器和符号表由 Spirit::qi 提供。

这是我的代码:

这里的问题在于 boost::phoenix::bind,但我不知道如何解决这个问题(我对这个库相当陌生)。

0 投票
1 回答
85 浏览

c++ - 我可以在编译时判断 Boost.Phoenix lambda 的一组特定输入类型是否有效?

假设我有一个 Boost.Phoenix lambda 表达式,如下所示:

有没有一种好方法可以在编译时检测 lambda 表达式是否有效,给定与 arguments 相关的类型列表_1_2等等?我在想我想用它enable_if来确定 lambda 是否支持输入类型。如果是这样,将直接调用 lambda,而如果不是,我想生成一个无操作。伪代码将是这样的:

我只是不确定如何is_supported实施,或者是否有可能。我没有使用 C++11;我会假设只有 C++03(因为 Phoenix 需要它)。

0 投票
0 回答
140 浏览

c++ - Boost Phoenix 运算符重载/重新定义?

有没有(最好是简单的)方法来重新定义 Phoenix 中的标准运算符之一?我想有“>>”例如调用我自己的(懒惰的)仿函数。

简单用例:我可能想定义一个“管道”运算符,以便:

可以用一种非常棘手的方式写成

然后调用为

0 投票
1 回答
1039 浏览

c++ - boost::phoenix::insert 的评估结果

我在尝试评估boost::phoenix::insert将元素插入地图的结果时遇到了困难。与常规std::map::insert返回的actor对象类似,它boost::phoenix::insert也返回一个std::pair<Iterator where, bool result>. 我对该对的第二个元素感兴趣,以检查插入是否成功。说明该问题的大量条带化代码示例如下:

使用 MSVC2012 和 boost 1.53 时出现以下错误:

clang3.2报同样的错误:

我即将用完如何正确评估插入结果的想法。任何帮助,将不胜感激。

编辑:我的问题的更广泛背景是我正在尝试使用 boost::spirit::qi 解析类似 C++ 的枚举。我发现的任何尝试实现相同目的的示例都不会检查重复的枚举成员。这里有两个相关规则的代码片段:

0 投票
0 回答
587 浏览

c++ - 在 boost::phoenix::lambda 中通过引用捕获

我可以创建一个boost::phoenix::lambda按价值捕获的产品。但是,尝试修改由 value 捕获的变量会产生以下错误

有道理,然后通过引用捕获。通过引用捕获会在 clang 3.2 中产生以下错误:

在下面的示例中,我需要通过引用来捕获以获取与 C++11 lambda 等效的代码。通过引用捕获的正确方法是boost::phoenix::lambda什么?

最小的例子:

更新 1:已删除using namespace std;(Xeo 在评论中建议)。

0 投票
1 回答
932 浏览

c++ - boost::spirit:语义动作块中的多个语句

boost::phoenix 使用运算符 "," 定义语句块(参见boost phoenix 块语句)。我正在尝试在 boost::spirit 规则的语义操作部分中使用此构造。但是,看起来只执行了语句块中的最后一条语句。这是一个显示问题的最小可编译示例:

该程序(使用 boost 1.52)打印

1:a=0,b=2

但我期待a = 1,b = 2。这是它应该如何工作的吗?为什么?

谢谢!

0 投票
0 回答
207 浏览

c++ - 如何在 Boost Proto/Phoenix 中使用非多态 lambda?