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

boost - 有没有更好的方法可以在增强精神中转换为大写?

我做了一些类似于创建一个structforphoenix::function

然后在我的语义操作中使用该功能。

我想知道是否可以在我的语义代码中使用某种单行代码(而不是创建结构)?

谢谢!

0 投票
1 回答
965 浏览

c++ - boost.lambda 或 boost.phoenix 的静态函数

我经常使用 boost.lambda(和 phoenix)在 C++ 中定义 lambda 函数。我真的很喜欢它们的多态属性、它们的简单表示以及它们使 C++ 中的函数式编程变得如此容易的方式。在某些情况下,使用它们来定义小函数并在静态范围内命名它们会更干净、更易读(如果您习惯阅读它们)。

存储这些与传统函数最相似的函数的方法是将它们捕获在一个boost::function

但问题是这样做的运行时效率低下。尽管add这里的函数是无状态的,但返回的 lambda 类型不是空的,并且sizeof大于 1(因此boost::function默认 ctor 和复制 ctor 都会涉及new)。我真的怀疑编译器或 boost 方面是否有一种机制来检测这种无状态并生成相当于使用的代码:

当然可以使用 c++11 auto,但是变量不能在非模板上下文中传递。使用以下方法,我终于设法做几乎我想做的事:

使用 gcc 4.6.1 编译该程序的输出是(无论优化级别如何):

正如预期的那样。在这里,我保留了一个指向 lambda 表达式类型的静态指针(出于优化目的,尽可能为 const)并将其初始化为NULL. 这样,如果您尝试“静态化”带有状态的 lambda 表达式,您肯定会遇到运行时错误。如果你静态化一个真正无状态的 lambda 表达式,一切都会解决。

关于问题:

  1. 该方法似乎有点脏,您能想到任何会导致这种行为不端的情况或编译器假设(预期行为:如果 lambda 是无状态的,则可以正常工作,否则会出现段错误)。

  2. 当 lambda 表达式有状态时,你能想到任何尝试这样做会导致编译器错误而不是段错误的方法吗?

在 Eric Niebler 回答后编辑:

0 投票
1 回答
434 浏览

c++ - 使用 boost.phoenix 容器算法

我有一个使用 boost 1.47 phoenix 的 Visual Studio 2008 C++03 应用程序(更新:也使用 1.49)。我想定义一个 boost::function 来从列表中删除一个元素。例如:

但是我的RemoveFromList定义出现了一系列编译器错误。

类似的函数可以AddToList干净地编译:

这也可以正常工作(但不那么优雅):

实现此功能的正确方法是什么?

谢谢

0 投票
2 回答
329 浏览

c++ - Boost.Phoenix 本质上是否比等效的 C++11 lambda 慢(它是否使用虚拟调用、'volatile' 用法等)?

我一直认为 Boost.Phoenix 使用类型推断来静态推断一切,直到我尝试了这段代码:

并收到警告:

警告 C4239:使用了非标准扩展:'argument':从转换const char [3]为非volatile const boost::proto::detail::anyns::any &
const 引用只能绑定到左值

这让我很惊讶。我没想到会在any任何地方看到,更不用说volatile

这是否意味着 Boost.Phoenix 实际上本质上比其等效的 C++11 lambdas 慢(忽略我在这里使用的特定编译器)?

0 投票
3 回答
970 浏览

c++ - 与 C++11 lambda 相比,bind() 是否有任何优势(除了兼容性)?

我正在考虑将我的代码迁移到使用 C++11 风格的 lambda,而不是bind到处都有 s 。但我不确定这是否是个好主意。

与 C++11 风格的 lambda 相比,使用 eg boost::lambda(or boost::phoenix) 有什么实际优势吗?

转移到 lambdas 是个好主意吗?我是否应该迁移我的代码?

0 投票
1 回答
198 浏览

c++ - Boost::Lambda 中的 ref()?

refBoost::Lambda 中的 Boost::Phoenix 的等价物是什么?我在在线文档中找不到它。

boost::ref并且boost::lambda::var似乎不起作用(显然,它们没有运算符重载)。

0 投票
1 回答
171 浏览

c++ - 如何判断 Boost 的哪些部分已被弃用?

我刚刚开始为我的嵌入式 C++ 编程使用 boost。Lambda 看起来很有趣,所以我正在阅读它。当我尝试在 shared_ptrs 容器上使用带有 lambda 的 stl 算法时,我遇到了一些问题。在 SO 上进行一些搜索后,我找到了一篇文章,指出 Lambda 已被弃用,Phoenix 将用于所有新代码。当我尝试了解更多关于 boost 的知识时,我想避免学习已弃用的部分。这种类型的事情记录在哪里?

0 投票
0 回答
128 浏览

boost - 通过 boost::phoenix 在 boost::qi 语法中访问元组作为向量的后元素

如何通过语法中使用的 boost::phoenix 访问元组作为向量的后退元素。我想设置向量后面元素的元组的第二个元素(之前添加的)

例如

在我的 msvc 2008 中,错误是

boost::phoenix::at_c' : 无法将参数 1 从 'boost::phoenix::actor' 转换为 'const var_type &

显然phoenix::at_c不能从中推断出tuple类型phoenix::back

我的问题:在这种情况下如何结合凤凰语句?

0 投票
3 回答
219 浏览

c++ - 我的 Phoenix lambda 表达式有什么问题?

我希望以下示例 Boost Phoenix 表达式能够编译。

我错过了什么?

0 投票
3 回答
315 浏览

haskell - 哪种函数式语言方法最容易转移到 Boost Phoenix?

我希望通过 am 学习函数式编程,以便将 Boost.phoenix 集成到我的项目中。

哪种语言最相似,因此我可以找到能够以可以在该上下文中轻松应用的方式说明函数式编程概念的书籍... haskell 和 ocaml 相似吗?

或者,有没有什么好的函数式编程书籍可以应用到 Boost.phoenix?