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

c++ - Boost phoenix 或 lambda 库问题:从 std::vector 中删除元素

我最近遇到了一个问题,我认为 boost::lambda 或 boost::phoenix 可以帮助解决,但我无法正确使用语法,所以我用了另一种方式。我想要做的是删除“字符串”中小于一定长度而不是另一个容器中的所有元素。

这是我的第一次尝试:

我最终是如何做到的:

0 投票
6 回答
1516 浏览

c++ - boost lambda 或 phoenix 问题:使用 std::for_each 对容器的每个元素进行操作

我在清理一些旧代码时遇到了问题。这是功能:

我感兴趣的是将 for 循环清理为 lambda 表达式,但很快就陷入了如何将正确的参数传递给 get_connectivity_data 的问题。get_connectivity_data 通过引用获取 std::vector 并用一些数据填充它。输出包含每个“块”的 std::vector。

基本上我的结论是,让我的代码保持原样更容易、更简洁、更短。

编辑:

因此,正如我所设想的那样,对我的问题最接近的答案是:

然而该代码无法编译,我对代码进行了一些修改以使其编译,但我遇到了 2 个问题:

  1. _ 1 是一个智能 ptr,std::distance 对它不起作用,我想我需要使用 &chunks[0] 作为开始
  2. 由于 _ 1 是一个智能指针,我不得不这样做: &chunk_vec_t::value_ type::ValueType::get_connectivity_data 导致 VC9 编译器崩溃...

关于 zip_ 迭代器的答案看起来不错,直到我进一步阅读并发现对于这种特定用途,所需的额外代码量很大(绑定这个和那个等)。

编辑2:

我找到了一个可接受的解决方案,它的无关语法低且清晰,我在此处和下面发布了该解决方案。

0 投票
1 回答
1820 浏览

c++ - Boost::bind 和 Boost Phoenix::bind 有什么区别?

Boost::bind 和 Boost Phoenix::bind 有什么区别?

0 投票
1 回答
904 浏览

c++ - boost phoenix::bind 编译时出错

我正在使用 phoenix::bind 并收到此错误消息:

错误 C2039:“绑定”:不是“凤凰”的成员

我使用绑定和错误指向的代码行是:

phoenix::bind( &OptionalInputPort::eraseDataEditor ) ( phoenix::var( *optionalPort ) )

我不知道是什么问题。

phoenix include 是这一行:#include boost/spirit/home/phoenix.hpp

谢谢。

0 投票
2 回答
202 浏览

c++ - boost文件的编译错误

我在使用 boost 库编译代码时遇到很多错误,主要是在我使用 Spirit 命名空间时。这些错误是 boost 文件上的语法错误,例如:

boost/spirit/home/classic/dynamic/lazy.hpp(33):错误 C2143:语法错误:缺少';' 在'<'之前

或者

boost/spirit/home/classic/dynamic/lazy.hpp(33):错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数

或者

boost/spirit/home/classic/utility/grammar_def.hpp(104) : error C2039: 'nil_t' : is not a member of 'boost::phoenix'

我正在从 Visual Studio 6 迁移到 Visual Studio 2008 Express,并从最古老的 boost 版本之一迁移到最新版本。

我想知道有什么问题。我认为问题不能出在 boost 库中。

0 投票
2 回答
2833 浏览

c++ - C++ 中的函数式数据结构

有谁知道 C++ 数据结构库提供熟悉的 STL 结构的功能(又名不可变,或 FP 意义上的“持久”)等价物?

“功能性”是指对象本身是不可变的,而对这些对象的修改会返回与父对象共享相同内部结构的新对象。

理想情况下,这样的库将类似于 STL,并且可以与 Boost.Phoenix 很好地配合使用(注意——我实际上并没有使用过 Phoenix,但据我所知,它提供了许多算法但没有数据结构,除非进行延迟计算的更改到现有的数据结构计数 - 是吗?)

0 投票
1 回答
2031 浏览

c++ - boost lambda 与 phoenix

我最近开始研究 boost phoenix,作为 lambda 的替代品。phoenix 是 lambda 的完全替代品,还是 phoenix 不提供某些 lambda 功能?凤凰成熟了吗?有什么我应该知道的吗?

我的主要兴趣是运算符组合,控制语句和强制转换不那么重要

谢谢

0 投票
2 回答
919 浏览

c++ - 凤凰城中的 C++ boost::lambda::ret 等价物

Boost lambda 允许使用ret<T>模板覆盖推导的返回类型。我曾尝试在 phoenix 中搜索等价物,但找不到。

凤凰有等价物吗?我知道如何制作自己的替代品,但我宁愿不这样做。谢谢你

0 投票
1 回答
521 浏览

c++ - 如何使用带有 boost::transform_iterator 的凤凰表达式?

<更新>像往常一样,这个问题是错误的。实际的问题是:为什么transform_iterator 不使用常规的result_of<> 元函数来确定返回类型,而不是直接访问UnaryFunc::result_type。发布了解决方法的答案。 </更新>

具体来说,有没有办法让 phoenix 表达式result_type按照 std::unary_function 概念的预期公开类型?boost::transform_iterator 似乎期待这一点,从查看它的 src 来看,我没有看到一个简单的解决方法。

这是一些重现我遇到的问题的代码:

编译此错误消息的相关部分是(gcc 4.3.4,boost 1.43):

我对 boost::lambda (缺少result_type)有同样的问题。我以为我在过去看到过 make_transform_iterator 和 lambda 的类似用法,现在我想知道我是否只是想象它。

phoenix 或 lambda 中是否有提供的包装器或其他一些机制来公开result_type

0 投票
1 回答
1752 浏览

boost - 使用自定义属性解析提升 Spirit 规则

我正在编写一个 Boost Spirit 语法来将文本解析为这些结构的向量:

这个语法有这样的规则:

然而,实际的语法pairSequence是这样的:

我希望这个语法产生一个等于双精度并Pair等于某个常数的值。我想做这样的事情:ab

当然,上面没有编译。我尝试向 中添加构造函数Pair,但仍然出现编译错误(没有匹配函数调用 'Pair::Pair(const boost::phoenix::actor >&, double)')。