问题标签 [boost-mpl]

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 投票
6 回答
2397 浏览

c++ - 如何在 C++ 中为 MPL 向量的所有成员显式实例化模板?

考虑以下头文件:

我想Foo::read在源文件中为 a 中包含的所有类型显式实例化成员函数模板boost::mpl::vector

可能吗?在此先感谢,丹尼尔。

编辑

我找到了一些解决方案 - 似乎Foo::read<T>在结构的构造函数中分配一个指针,然后声明其中的变量,导致实例化:

因此,该过程可以自动化如下:

但我不知道这个解决方案是否可移植且符合标准?(适用于 Intel 和 GNU 编译器。)

0 投票
2 回答
1479 浏览

c++ - 从 boost mpl 向量中注册类型

如何使用 boost::mpl 自动生成最后 3 行?自动我的意思是不必重复“相同”行3次

0 投票
1 回答
237 浏览

c++ - 需要关于 boost::mpl 的解释

我不明白 fold 的工作方式,为什么是 int_<0>?为什么是_float< _2 >?

有人可以给我一些线索来理解这个“功能”吗?谢谢

0 投票
1 回答
1373 浏览

c++ - 提升 mpl 字符串

嗨,在 boost mpl 文档中,我发现了 mpl::string 和以下示例:

我有点惊讶,因为我认为在 C 或 C++ 中,字符'之间不能有多个字符?

正常有效吗?

0 投票
1 回答
571 浏览

c++ - 遍历 mpl::map

循环 mpl::map 的简单方法是什么?

我怎样才能遍历 m ?

0 投票
2 回答
718 浏览

c++ - 有人可以帮我使用 Boost::MPL 创建一个变量容器吗?

我创建了一个物理系统,可以处理任何碰撞对象到任何碰撞对象,如下所示:

还有其他几个帮助对象使其易于使用,但要点是有动态对象需要针对静态对象和其他动态对象进行测试,而静态对象不需要检查。

我想要的是这样的:

我很想通过添加函数来推断容器,因此使用系统会自动更新类型列表。我想我知道如何使用模板函数生成类型列表,但不知道如何在我需要的地方获得它,或者在编译的什么时候完成。

如果不是这样,那么某些系统使用两个类型列表,然后在内部编写更新函数来迭代所有列表,使它们相互配对。

我已经阅读了一些 boost MPL 的书,并多次阅读了 Andrei 的书。但是,我似乎陷入了它的工作原理,并没有真正将其转化为我如何使用它。我希望他们在 MPL 书中有更多关于现实世界示例的部分。

我已经能够让游戏引擎的所有部分与渲染、物理、碰撞(我将检测与反应分开)、输入、网络、声音等以通用方式进行交互。现在我只需要以一种通用的方式来保存所有的东西。在完成了所有通用工作之后,要求继承只是为了让我可以在容器中保存一些东西是很愚蠢的,而且我不想手动编写每个集合的可能性,因为这是通用编程的一大好处。

我看到 Jalf 曾表示他/她使用 MPL 做了类似的事情,但没有详细说明,我无法弄清楚。如果有人知道实际使用示例或者我可以在哪里获得有关使用 MPL 的更多信息,我将不胜感激。

再次感谢!

更新

boost MPL 和 boost Fusion 似乎都可以满足我的要求,但是这两个库的真实生活示例似乎都很少。MPL 的文档只不过是这个模板所做的,祝你好运理解它的含义。“这是一个例子,但这只是冰山一角!” Fusion 更好一些。

一个典型的 boost MPL 示例是 has_xxx。他们在示例中使用了 XXX 和 xxx,因此很难看出可以使用 XXX(所需文本)和 Test 或 CheckType 或任何更可区分的用户类型来代替 xxx 的区别。另外,没有提到这些都不在命名空间中。现在我知道为什么斯科特迈耶斯将其与《惊魂记》中的淋浴场景相提并论了。

真的很遗憾,因为我编译和理解的一点点确实有用的东西,但是很难弄清楚如果我在运输产品上我永远不会花这么多精力。

如果有人知道真实世界的示例或更好的参考资料、解释或教程,我将不胜感激。

更新

这里有更多代码:

然后使用它我这样做

然后我所需要的就是调用与我所有的主动可碰撞对象碰撞我所有的主动和被动对象。

我没有使用 std::function ,因为添加函数名称使代码对我来说更清晰。但也许这只是传统思维。

0 投票
1 回答
309 浏览

c++ - 为什么类型知识会随着 Boost::MPL 消失?

我有以下代码,它工作正常。

但如果我这样修改它:

我收到错误 error C2440: 'static_cast' : cannot convert from 'const Generate' to 'wrap &' with [ T=int ]

为什么它可以在 main 中工作,但如果我将其放入模块中则不行?如何将数据放入可以使用由类型列表创建的数据的值,以由类型列表驱动的一系列模板函数调用。基本上我如何制作一个对这两个部分有用的对象?

0 投票
1 回答
2032 浏览

c++ - 有人可以向我解释模板解析顺序规则吗?

好的,这里完成伪代码。

所以想法是,在任何时候实例化这个函数都会增长 some_meta_typelist 对象。如果这是跨边界完成的,是否可以保证在可能在 MPL::fold 函数中使用类型列表之前编译对这个模板构建机制的所有调用。何时对这些进行评估,您何时可以确定它们已完成?这是否应该仅限于编译单元并且永远不会跨越 .cpp 边界?是否有等效于调用带有静态变量的函数以确保在使用前已创建对象?

更新

我正在研究这样一种想法,即调用系统的对象将构建系统完成工作所需的类型列表。我的感觉是类型列表将完全取决于编译顺序,因此不是单个文件 CPP 之外的有效方法。我知道 MSVC 是按字母顺序编译的,或者至少以前是按字母顺序编译的,所以我可以将最终文件命名为 ZZZZ.cpp,最终我的意思是需要完全构建的类型列表的文件。这不是一个安全或兼容的解决方案。是这样吗?有解决办法吗?

谢谢大家

0 投票
2 回答
823 浏览

c++ - Boost MPL 模板列表

我想获取一个类模板列表T 1 , T 2 , ... T N并列出一个 MPL 类列表,其中每个模板都使用相同的参数进行实例化。

boost::mpl::list不能与模板模板参数列表一起使用,只能与常规类型参数一起使用。

所以以下不起作用:

我怎样才能让它工作?

0 投票
2 回答
1039 浏览

c++ - 使用 MPL 创建所有模板排列

我有以下模板类结构

Host 类现在可以有以下类型。

有没有办法用 boost::mpl 创建一个类型列表?目前我什至不知道从哪里开始。我的目标是拥有这样的功能:

boost::mpl 有可能吗?