问题标签 [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.
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 > 。
我是否遗漏了任何要指定的内容,例如标签、大小或?谢谢!
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”时,所有节点的构造函数都被成功调用。谢谢!
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<>。谢谢!
c++ - 使用 boost::fusion::for_each 时传递/绑定参数
我想在 boost::fusion::vector 的所有元素上调用一个函数。元素的类型如下:
可以通过以下方式在每个元素上调用此函数:
然而,这种print_all()
包含辅助类的实现非常丑陋,而且看起来过于复杂!假设允许 C++0x,那么实现它的正确方法是什么?
c++ - BOOST_FUSION_ADAPT_STRUCT 没有使用正确数量的参数
我正在使用 Boost::Spirit 将一些文本解析为结构。这需要使用 BOOST_FUSION_ADAPT_STRUCT 来解析文本并直接存储到结构中。我知道宏有 2 个参数:结构名称作为第一个参数,所有结构成员作为第二个参数。我只通过了那两个。但我得到一个编译错误说,
这是代码片段。如果您需要整个代码,请告诉我。
谢谢。
这是我要解析的规则,
c++ - 运行时和融合序列之间的交互
关于我的问题C++ Tuple of Boost.Range - 获取元素类型的元组?
我有以下内容:
所有容器(元容器和运行时)都是 size N
。我想编写执行以下操作的代码:
我曾尝试使用 Fusion 的transform
操作编写此代码,但问题似乎是函子不知道它正在操作的元素的索引。
我以为是这样的:
如果我能以某种方式使融合序列indices
包含int 0...N
那么有人可以帮我做一个升序,或者找到更好的方法来实现我的目标吗?非常感谢。
c++ - 我可以/应该从 Boost.Fusion 序列继承吗?
我可以/应该从 Fusion 序列继承来实现我自己的序列类吗?如果没有,为什么不呢?
例如:
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 有这个解决方案。:-)
c++ - boost::fusion::for_each 中的函数对象与 std::for_each 不同
在升级到更新的编译器并解决编译器错误时,我意识到boost::fusion::for_each
需要传入的函数对象具有 operator const
。
来自Boost的示例:
这当然没有改变。我没有意识到它与 不同std::for_each
,它不需要操作员是const
。
有什么明显的理由要求const
吗?我显然无法改变这一点,但我想了解为什么这两者不同。
感谢您的任何见解和解释!
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?