问题标签 [boost-fusion]

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 回答
1615 浏览

c++ - boost::fusion::result_of::as_set(或 as_vector)从复杂(嵌套)mpl 序列转换而来

从简单的 mpl 序列(如 ::boost::mpl::vector< node_a, node_b, node_c >)到融合序列的转换工作正常。但是当我尝试将后处理的 mpl 序列从复杂的 mpl 序列(如嵌套的 mpl 向量)转换为融合序列(通过 result_of::as_set 或 as_vector)时,出现编译时错误。

“restored_set_type”的打印结果是:

, 但它似乎丢失了一些类型信息,这使得它不同于简单的 mpl 序列 ::boost::mpl::vector< node_c, node_b, node_a > 。

我是否遗漏了任何要指定的内容,例如标签、大小或?谢谢!

0 投票
1 回答
266 浏览

c++ - 制作 boost::fusion::result_of::as_set<> 的实例不会调用其元素的构造函数

此代码编译。我的问题是,当我们创建“fusion_set_type”的实例时,该融合集中的所有类型的构造函数都应该被调用。然而,这个“fusion_set_type”并没有调用它包含的任何类型的构造函数。嵌套的折叠/转换操作中可能有一些不正确的地方。“node_set_type”的结果是“struct node_c, struct node_a, struct node_b”,当我使用 mpl::for_each 加上一个函数对象循环“node_set_type”时,所有节点的构造函数都被成功调用。谢谢!

0 投票
1 回答
906 浏览

c++ - 使用 boost::fusion::fold 将 boost::fusion::set 转换为 boost::fusion::map

我有一个融合集,想将其转换为融合图。

此代码编译。但它无法打印出 my_map 的结果。my_set 构造成功。my_map 简单地从 my_set 转换,每个元素的原始类型作为键,默认构造函数的实例对象作为值。我想知道 my_map 是否从 fusion::fold 成功创建。my_set 可以通过调用 fusion::at_key<> 进行查询,但 my_map 不适用于 at_key<>。谢谢!

0 投票
1 回答
1171 浏览

c++ - 使用 boost::fusion::for_each 时传递/绑定参数

我想在 boost::fusion::vector 的所有元素上调用一个函数。元素的类型如下:

可以通过以下方式在每个元素上调用此函数:

然而,这种print_all()包含辅助类的实现非常丑陋,而且看起来过于复杂!假设允许 C++0x,那么实现它的正确方法是什么?

0 投票
1 回答
1161 浏览

c++ - BOOST_FUSION_ADAPT_STRUCT 没有使用正确数量的参数

我正在使用 Boost::Spirit 将一些文本解析为结构。这需要使用 BOOST_FUSION_ADAPT_STRUCT 来解析文本并直接存储到结构中。我知道宏有 2 个参数:结构名称作为第一个参数,所有结构成员作为第二个参数。我只通过了那两个。但我得到一个编译错误说,

这是代码片段。如果您需要整个代码,请告诉我。

谢谢。

这是我要解析的规则,

0 投票
1 回答
259 浏览

c++ - 运行时和融合序列之间的交互

关于我的问题C++ Tuple of Boost.Range - 获取元素类型的元组?

我有以下内容:

所有容器(元容器和运行时)都是 size N。我想编写执行以下操作的代码:

我曾尝试使用 Fusion 的transform操作编写此代码,但问题似乎是函子不知道它正在操作的元素的索引。

我以为是这样的:

如果我能以某种方式使融合序列indices包含int 0...N

那么有人可以帮我做一个升序,或者找到更好的方法来实现我的目标吗?非常感谢。

0 投票
1 回答
291 浏览

c++ - 我可以/应该从 Boost.Fusion 序列继承吗?

我可以/应该从 Fusion 序列继承来实现我自己的序列类吗?如果没有,为什么不呢?

例如:

0 投票
1 回答
3309 浏览

c++ - 如何使用一些 boost 库使 std::find_if 和 std::map 一起工作?

这个问题的灵感来自另一个提出这个问题的话题:

从地图容器中查找大于用户指定值的第一个值

这可以通过多种方式解决。典型的 C++03 解决方案定义了一个专用函数(或函子)并将其std::find_if作为第三个参数传递。

在 C++11 中,可以避免定义专用函数(或仿函数),而是可以使用lambda如下:

这是公认的答案

我仍在寻找一个简短而酷的解决方案。如果它是一个向量,那么我刚刚学习了一个很酷的解决方案,它利用Boost.Phoenix并且解决方案变得非常简洁(ideone demo):

arg1是在boost::phoenix::arg_names命名空间中定义的仿函数对象,表达式arg1>4计算为另一个仿函数,然后传递给std::find_if.

快速测试是(ideone),


我的问题是,我想以类似的方式解决地图问题。有没有这样的解决方案?就像是:

或者,

为了使它起作用,表达式at<1>(arg1) > 2必须计算为一个以const std::pair &作为参数的函子。我的直觉告诉我 boost 有这个解决方案。:-)

0 投票
1 回答
591 浏览

c++ - boost::fusion::for_each 中的函数对象与 std::for_each 不同

在升级到更新的编译器并解决编译器错误时,我意识到boost::fusion::for_each需要传入的函数对象具有 operator const

来自Boost的示例:

这当然没有改变。我没有意识到它与 不同std::for_each,它不需要操作员是const

有什么明显的理由要求const吗?我显然无法改变这一点,但我想了解为什么这两者不同。

感谢您的任何见解和解释!

0 投票
1 回答
503 浏览

c++ - Boost phoenix actor as a fusion callable object

I was wondering if it was possible to create callable phoenix actors and use them in fusion sequences. Given the following source:

This works as expected.
But since I can create polymorphic callable actors in phoenix like this:

I was wondering if I can use phoenix to get rid of my FusionCaller struct. Like this: fusion::for_each(fmap, /* some magic phoenix expression*/);

So is this possible at all with phoenix?