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

c++ - Boost Fusion 文章、示例、教程?

您知道 boost::fusion 库使用的任何好的资源/文章/示例吗?

Boost Fusion 看起来非常有趣,我想我了解它的工作原理以及如何使用基础知识,但我正在寻找一些展示任何有趣用法/实践的资源,例如文章或博客(除了 boost.org 本身)。

0 投票
2 回答
2474 浏览

c++ - 从 mpl::vector 生成 fusion::vector

如何fusion::vector生成mpl::vector?如何mpl::vector生成fusion::vector

我需要generate_fusion_vectorgenerate_mpl_vector元功能。我可以编写自己的元函数,但我怀疑它们已经存在。

我之前有过在fusion::map帮助下生成的经验result_of::as_map,但是在当前的 boost(trunk, 1.39 也是) 中会出现这样的错误:

我不明白这是怎么回事?

0 投票
1 回答
2108 浏览

c++ - 如何迭代 boost::fusion 序列?

我正在尝试初始化与 fusion::invoke 一起使用的 args 列表。args 都是以下形式:

所以我可以做,例如

但是,如果我有一个 FusionListType 类型的融合序列,我知道序列中的每种类型都是某种类型的 ArgWrapper,我如何遍历该列表并在每个元素上调用 Setup 函数(我只有一个 lua_State 指针并且想要将其用作 Setup 的第一个参数,并且我想将序列中的位置用作第二个参数)。

因此,对于大小为 3 的向量,我希望得到的逻辑是:

我试过了:

但这无法编译,说function template partial specialisation ‘FillArgWrapper<ArgWrapperType, 0>’ is not allowed.

提前致谢。

0 投票
1 回答
1277 浏览

c++ - 如何将 boost::mpl::fold 与 boost::fusion::map 一起使用?

当我尝试编译这个时:

我收到以下错误:

来自 fusion 文档:“Fusion 提供与 MPL 的全面兼容性。Fusion 序列完全符合 MPL 序列,而 MPL 序列与 Fusion 完全兼容。如果您希望仅处理类型,则可以在 MPL 上使用 Fusion 序列。”

当我通过 boost::mpl::map 时,它可以工作。

有什么线索吗?

0 投票
1 回答
4264 浏览

c++ - Boost.MPL 和类型列表生成

背景

这适用于游戏引擎中的内存管理器。我已经freelist实现了,如果有这些,我希望有一个编译时列表。(例如 MPL 或 Fusion 向量)。'freelist对应于分配大小,当分配/释放大小小于常量的对象时,它们将转到相应的freelist.

最后,这意味着全局的小对象具有摊销的恒定时间分配和恒定时间释放。(耶。)

问题

问题是生成我需要的类型,所以我最终可能会使用 Fusion 来实例化这些类型。使用的类型有(缩短等):

's将freelist管理data_block's 的 2 次幂大小,从最小值开始到最大值。所以我想要的是:

要生成这个:

显然,我可以手动完成,但我宁愿避免这样做,以获得更通用和可调整的界面。在代码中使用 Fusion 向量也应该比硬编码成员更简单。

问题

我不确定解决这个问题的最佳方法;我以前从未广泛使用过 MPL。有任何想法吗?我有一些糟糕的想法,比如制定一个范围,然后remove_if它不是 2 的幂等,但肯定不是最好的。也许是递归的,每次加倍,推入我的结果向量?我不知道该怎么做。

0 投票
1 回答
973 浏览

c++ - boost fusion:奇怪的问题取决于向量上的元素数量

我正在尝试在个人项目中使用 Boost::Fusion (Boost v1.42.0)。这段代码出现了一个有趣的错误:

它无法编译(gcc 4.4.1):

但是,如果我将向量中的参数数量和方法从 6 更改为 5 int,float,float,char,int,intint,float,float,char,int我可以毫无问题地编译它。

我怀疑参数的最大数量是一个限制,但我试图通过定义来改变它,但FUSION_MAX_VECTOR_SIZE没有成功。

我看不出我做错了什么。你能重现这个吗?这可能是一个提升错误(我对此表示怀疑,但并非不可能)?

0 投票
1 回答
1774 浏览

c++ - boost::fusion::push_back 的正确用法是什么?

如何让 for_each(newStuff, chug()) 工作?

(注意:我只是从关于 boost::fusion 的过于简短的文档中假设我应该在每次调用 push_back 时创建一个新向量。)

0 投票
2 回答
1147 浏览

c++ - 如何在异构容器上使用 boost::fusion::transform?

Boost.org给出的 fusion::transform示例如下:

然而我并没有“明白”。他们示例中的向量包含所有相同类型的元素,但使用融合的一个重点是异构类型的容器。如果他们make_vector(1, 'a', "howdy")改用了怎么办?

int operator()(int t)
需要成为
template<typename T> T& operator()(T& const t)

但是我将如何编写 result_type 呢?template<typename T> typedef T& result_type当然不是有效的语法,即使它是没有意义的,因为它与函数无关。

0 投票
2 回答
747 浏览

c++ - 我在哪里可以找到 boost::fusion 文章、示例、指南和教程?

我将继续无耻地重复这个问题,因为接受的答案本质上是“不,没有指南”,而且距离被问到现在已经快一年了。除了boost.org 上的准系统文档之外,有谁知道任何关于 boost::fusion 的有用文章、指南、教程等?(我敢肯定,在学习了图书馆之后,它可以作为参考资料。)我完全愿意,比如说,亚马逊上的一本书的链接。刚才自己搜索了它,但我想出的只是绿茶。Google 上的顶级链接也好不到哪里去。

0 投票
1 回答
1040 浏览

c++ - Boost.Fusion Functional:使用默认参数调用函数

是否可以使用boost::fusion::invoke函数调用具有默认参数的函数而不指定这些函数?

我正在编写一个用于绑定到脚本语言的包装器,默认参数将大大改善包装器用户的直观感受。恐怕标准并没有涵盖这种情况。

附注:
我知道可以使用仿函数解决它:

然而,这不是一个选项,因为我不想强迫用户创建函子只是为了指定默认参数。