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

c++ - C++ 在编译时将整数转换为字符串

我想做这样的事情:

似乎 boost MPL 库可能允许这样做,但我真的不知道如何使用它来实现这一点。这可能吗?

0 投票
1 回答
2015 浏览

c++ - 使用 mpl::vector 定义 boost::variant 类型

我正在使用该库boost::variant来存储大量类型。随着类型的数量越来越多,我很快就会达到 20 种的限制。在文档中,似乎可以使用 a 定义变体mpl::vector,它允许超过 20 种类型(如果我是正确的,最多 50 种)。我试图像这样替换我的变体定义:

我直接把我的代码。大多数类型是包含很少数据的结构。

编译时,我得到一个奇怪的:

以前的变体定义工作正常,所以我很惊讶我的替换不起作用。我是新手,mpl所以也许我错过了一些东西 - 但找不到什么!我过得好吗?

提前致谢。

0 投票
3 回答
875 浏览

c++ - C++禁止覆盖虚函数

我使用库中的 A 类,并希望通过自己的 B 类为其添加一些功能。B 类的用户应该从它派生,就好像他从 A 类派生一样。

因此,如果有人创建了一个从 B 派生的 C 类,他应该必须实现 func2:

对我的应用程序来说非常重要的是,C 类不会覆盖 func1,从而消除了 B::func1()。

有没有办法禁止 B 的所有子类覆盖这个虚函数?如果不是在普通的 C++ 中,当这个函数被覆盖时,boost MPL 中是否有一些东西会引发编译器错误?

0 投票
2 回答
774 浏览

c++ - 从任意映射中获取指向 mapped_type 的指针或引用

编辑:我已经找到并编写了我的问题的解决方案,但我没有回答这个问题,因为我的解决方案可能仍然不理想。

我正在编写一个小型库,旨在在地图上执行例程,但是我在设计一组类模板时遇到了麻烦,这些模板将让我获得指向地图的指针或引用(取决于地图的 value_type 的 second_type) mapped_type,不管映射的类型(例如std::map、boost::ptr_map)。

为了进一步阐述,我列出了一些输入类型和所需的输出类型。

我的代码通过了案例 A、B、D 和 E,但在案例 C 和 F 上失败了。这是我目前所拥有的。

我正在尝试使用 boost::mpl 来做到这一点,这就是我到目前为止所做的,但是使用两个版本的代码我都会遇到同样的错误。

错误。

修改后的结构特化来处理不是映射指针的左值。

0 投票
3 回答
138 浏览

c++ - 在运行时选择 ctor 参数

是否可以解决以下在运行时使用 mpl 选择参数的情况?

理想情况下,

0 投票
4 回答
906 浏览

c++ - 如何从类型列表中继承,然后调用继承成员列表中的成员?

我有一组具有以下结构的类:

我需要能够将这些类中的一个或多个组成一个类 X。伪代码:

我想我需要很多 mpl,但我并不擅长。我想做什么可行吗?一个代码示例会很棒。

我的错误:忘了提到我不能使用 C++11 功能。我正在寻找 MPL 解决方案。

0 投票
2 回答
823 浏览

c++ - 模板参数的“部分应用”

我有以下“主要”模板:

以及我想使用的模板TT

特别是,我想使用类似的东西

它是模板的一种部分应用。我知道 Boost.MPL 涉及到这种东西。问题是我已经有一些使用 TT 和模板的代码

喂给 TT。

所以问题是:如何在对现有代码进行最小修改的情况下S1使用。TT如果必须使用 Boost.MPL,请告诉我最合适的解决方案。

0 投票
5 回答
7407 浏览

c++ - 在 C++ 编译时获取类型名称

我想获取类型名称并将其打印以进行调试。我使用以下代码:

它运作良好,但我认为有不必要的运行时开销。有没有办法获得在编译时计算的人类可读形式的类型 id?我在想一些看起来像这样的东西:

这将返回类型名称的字符串常量。

0 投票
1 回答
1038 浏览

c++ - boost::mpl::for_each 的类型包装器错误(来自 Abrahams & Gurtovoy book 的第 9.1.1 节)

以下代码几乎是从 David Abrahams 和 Aleksey Gurtovoy 所著的 C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond 一书的第 9.1.1 节中逐字复制的。

唯一的变化是我希望能够使用常规的 Boost 模板 mpl::identity 更改书中的类型包装器模板。但是,在 Microsoft Visual C++ Express 2010 (SP1) 下,如果我这样做,我会收到一个神秘的编译器警告。

这似乎与类型包装模板有一个名为“type”的内部类型定义有关。将该 typedef 更改为“Type”(或简单地删除该行)将使代码正常工作。有人对这种奇怪的行为有解释吗?

输出/I"C:\Program Files\boost\boost_1_47" /I"C:\Program Files\boost" /Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm- /EHsc /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Release\mpl.pch" /Fa"Release\" /Fo"Release\" /Fd"Release\vc100.pdb" /Gd /analyze- /errorReport:queue