问题标签 [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 回答
148 浏览

c++ - BOOST_PHOENIX_ADAPT_FUNCTION 导致无效模板错误

我正在尝试根据 Boost::phoenix 文档从模板函数创建一个惰性函数。代码看起来像这样

这实际上是 BOOST 文档中的示例之一。将此文件存储为 mk_lazy1.cpp 并尝试编译给出

我在 Debian 测试系统上使用 gcc-4.7。老实说,我有点迷茫,因为我完全不知道这里出了什么问题(正如我所说,这实际上是 Boost 文档提供的示例之一的逐字复制)。

有人有好主意吗?

0 投票
1 回答
296 浏览

c++ - 用phoenix bind绑定一个boost信号

我正在使用 boost spirit qi 解析入站数据,然后根据其内容发送正确的功能。

boost::signals用来管理回调;我的问题是我似乎无法将 phoenix bind 与 boost 信号一起使用。

考虑以下测试用例:

这不编译,吐出一堵错误墙。

请注意,如果我将凤凰绑定线替换为

它按预期工作(但是由于程序的设计较大,这是不可能的)。

提前致谢。

0 投票
1 回答
133 浏览

c++ - Boost Phoenix 中嵌套 let 块中的变量隐藏

当“内部”局部变量隐藏“外部”局部变量时,我在 Boost Phoenix 中的嵌套 let 块遇到了一些问题。即使使用此处文档中的“可见性”示例,此处显示:

我收到以下错误:

有谁知道我如何在 Phoenix 的内部 let 块的范围内“隐藏”这样一个变量?我目前正在使用带有 GCC 版本 4.8 快照的 Ubuntu 13.04;铿锵声 3.2; 提升 1.49;还有 Boost 1.53。

0 投票
1 回答
176 浏览

c++ - 无法编译最简单的 Phoenix lambda

我目前正在尝试使以下非常简单boost::phoenix::lambda的编译:

但是,这会产生大量错误(此处无法发布),对我来说没有任何意义。以下是编译器输出的摘录:

我在带有 Boost 1.53.0 的 Windows XP 上使用 MinGW 4.7.2 编译这些。我究竟做错了什么?

0 投票
1 回答
1477 浏览

c++ - 使用 boost::spirit::karma 生成时如何避免 boost::phoenix

我是错误“LNK1179:无效或损坏的文件:重复的 COMDAT”的受害者,这些 消息来源让我相信,不使用phoenix我可以避免这个错误。

(这是我上一个问题的后续。)我想boost::phoenix用别的东西代替。也许boost::bind吧,但我不知道如何让它访问karma::_val.

以下代码无法在 VC9 上编译

错误 C2825:“F”:后跟“::”时必须是类或命名空间

完整的错误是这样的:

0 投票
1 回答
289 浏览

c++ - Obtaining the types of local variables in Boost Phoenix

How can I obtain the types of the local variables used within a scoped Boost Phoenix statement? Using Phoenix and Proto I can extract numerous aspects of a Phoenix expression. For example, the following code exposes the arity (3); tag type (lambda_actor); and child-2 tag type (shift_left) of a Phoenix lambda expression:

How can I obtain the types of the local variables; in this example: _a and _b?

0 投票
1 回答
958 浏览

c++ - Boost.Spirit.Qi:在解析时动态创建“差异”解析器

-二进制(减号)运算符可以创建“差异”解析器:

甚至复合差异:

但是我怎样才能在解析时生成差异解析器的整个结果呢?
我猜它可能是某种形式,如下所示:

在这里,该{..., ..., ...}部分实际上是一个 stl 容器,但这不是重点;我可以处理那部分。

我找到了模板qi::difference<Left, Right>——但我不知道如何使用它。

0 投票
2 回答
190 浏览

c++ - 用作仿函数时的 boost::phoenix 错误消息

我正在尝试学习 boost::phoenix 并尝试在 std::transform 中使用它,如下所示。

但是,我收到一个错误error: base operand of '->' has non-pointer type 'const boost::phoenix::actor<boost::phoenix::argument<0> >'

我不太确定这是什么意思。任何帮助都会很棒。谢谢

0 投票
1 回答
2164 浏览

c++ - Boost.spirit:解析数字字符和字符串

我需要解析一行,其中包含一个 unsigned int、X要丢弃的字符和一个字符串,所有这些都由一个或多个空格分隔。例如,1234 X abcd

上面的代码解析了这三个部分,但字符串最终包含一个垃圾字符 ( �abcd) 并且大小为 5 而不是 4。

我的解析器有什么问题?为什么字符串中有垃圾?

0 投票
1 回答
364 浏览

c++ - 提升规则的精神排列

我有两种类型的表达式,我想解析和计算结果。

  • 算术表达式:+、-、*、/ 和 sqrt() 函数;例如:“2 + 3 * sqrt(100*25)” -> 应该计算为 152

  • 函数:GetSubString() 和 ConcatenateStrings() 例如:“GetSubString('100str1', 0, 3)” -> 应计算为 100

我有 2 个单独的语法来解析这些表达式类型。现在我想将这两种语法结合起来,并可以一起定义这些表达式。

前任:

  • "GetSubString('100str1', 0, 2+1) + sqrt(9)" -> 结果= 103
  • “2 + 3 * sqrt(GetSubString('100str1', 0, 2+1))” -> 结果= 32

我试图通过使用置换运算符来组合以下两种语法。但它不编译。

那么这是结合我的 function_call_ 和算术表达式_ 规则的正确方法还是我应该如何做到这一点?