问题标签 [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.
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++ - C++ 在编译时将整数转换为字符串
我想做这样的事情:
似乎 boost MPL 库可能允许这样做,但我真的不知道如何使用它来实现这一点。这可能吗?
c++ - 使用 mpl::vector 定义 boost::variant 类型
我正在使用该库boost::variant
来存储大量类型。随着类型的数量越来越多,我很快就会达到 20 种的限制。在文档中,似乎可以使用 a 定义变体mpl::vector
,它允许超过 20 种类型(如果我是正确的,最多 50 种)。我试图像这样替换我的变体定义:
我直接把我的代码。大多数类型是包含很少数据的结构。
编译时,我得到一个奇怪的:
以前的变体定义工作正常,所以我很惊讶我的替换不起作用。我是新手,mpl
所以也许我错过了一些东西 - 但找不到什么!我过得好吗?
提前致谢。
c++ - C++禁止覆盖虚函数
我使用库中的 A 类,并希望通过自己的 B 类为其添加一些功能。B 类的用户应该从它派生,就好像他从 A 类派生一样。
因此,如果有人创建了一个从 B 派生的 C 类,他应该必须实现 func2:
对我的应用程序来说非常重要的是,C 类不会覆盖 func1,从而消除了 B::func1()。
有没有办法禁止 B 的所有子类覆盖这个虚函数?如果不是在普通的 C++ 中,当这个函数被覆盖时,boost MPL 中是否有一些东西会引发编译器错误?
c++ - 从任意映射中获取指向 mapped_type 的指针或引用
编辑:我已经找到并编写了我的问题的解决方案,但我没有回答这个问题,因为我的解决方案可能仍然不理想。
我正在编写一个小型库,旨在在地图上执行例程,但是我在设计一组类模板时遇到了麻烦,这些模板将让我获得指向地图的指针或引用(取决于地图的 value_type 的 second_type) mapped_type,不管映射的类型(例如std::map、boost::ptr_map)。
为了进一步阐述,我列出了一些输入类型和所需的输出类型。
我的代码通过了案例 A、B、D 和 E,但在案例 C 和 F 上失败了。这是我目前所拥有的。
我正在尝试使用 boost::mpl 来做到这一点,这就是我到目前为止所做的,但是使用两个版本的代码我都会遇到同样的错误。
错误。
修改后的结构特化来处理不是映射指针的左值。
c++ - 在运行时选择 ctor 参数
是否可以解决以下在运行时使用 mpl 选择参数的情况?
理想情况下,
c++ - 如何从类型列表中继承,然后调用继承成员列表中的成员?
我有一组具有以下结构的类:
我需要能够将这些类中的一个或多个组成一个类 X。伪代码:
我想我需要很多 mpl,但我并不擅长。我想做什么可行吗?一个代码示例会很棒。
我的错误:忘了提到我不能使用 C++11 功能。我正在寻找 MPL 解决方案。
c++ - 模板参数的“部分应用”
我有以下“主要”模板:
以及我想使用的模板TT
:
特别是,我想使用类似的东西
它是模板的一种部分应用。我知道 Boost.MPL 涉及到这种东西。问题是我已经有一些使用 TT 和模板的代码
喂给 TT。
所以问题是:如何在对现有代码进行最小修改的情况下S1
使用。TT
如果必须使用 Boost.MPL,请告诉我最合适的解决方案。
c++ - 在 C++ 编译时获取类型名称
我想获取类型名称并将其打印以进行调试。我使用以下代码:
它运作良好,但我认为有不必要的运行时开销。有没有办法获得在编译时计算的人类可读形式的类型 id?我在想一些看起来像这样的东西:
这将返回类型名称的字符串常量。
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
: