问题标签 [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 回答
1084 浏览

c++ - Boost.Variant、Boost.MPL:如何附加类型?

我查看了这个基于 boost.Any 的 grate 代码,不禁想知道我们是否可以使用Boost.Variant代替。我想知道这样的 API 是否可行:

这意味着最后编译器必须编译类似:

更新:

我尝试了什么(基于此Variant 文档和此MPL 演示文档):

但它无法编译并出现 2 个相同的错误:

0 投票
1 回答
264 浏览

c++ - C++ Boost MPL: how to get rid of vector and callnot internal function?

I am learning Boost.MPL and I am just starting. So please forgive me if solution is obvios. I look at such sample:

and cant help but wonder how to get rid of boost::mpl::vector when calling FooALL (turn it into a.FooAll<int, float, long>();) and for each argument call some static/global/or class internal function, not *this that confuses me?

0 投票
2 回答
3152 浏览

c++ - Boost mpl for each 和 free 函数

为什么这段代码不能编译:

我想知道 - 如何使 boost mpl for_each 与同一类的免费函数一起工作?

0 投票
1 回答
301 浏览

c++ - 如果 T 可以为空,我如何在 boost 中安全地获得 sizeof(T)?

我试图弄清楚如何在我的函数模板中获得一些要编译的代码,这些代码将确定 T 的返回值的大小,其中 T 是函数原型。

但是它仍然无法编译,因为 sizeof(void) 不是一个有效的操作——即使我正在尝试构造一个 if 语句,如果类型为 void,它将返回大小为 0。我对 BOOST MPL 还很陌生,所以,虽然我已经浏览了一段时间的文档,但我不确定如何应用 if_ 或 apply_if 等其他 if,以及这些是否可以工作。

谢谢。

0 投票
1 回答
1041 浏览

c++ - Boost::MPL Vector 和 For_Each:如何将向量打印为元组?

所以想象我们有一个 mpl::vector 我们想要打印(例如 cout)它作为这样的字符串:int, string, char。如何用 boost::mpl 做这样的事情?

0 投票
0 回答
267 浏览

c++ - Boost MPL 序列和定义:如何将 MPL 序列转换为定义字符串?

我知道我们可以将元素打印到一个知道总计数(伪代码)的定义中:

但我想知道如何为 boost::mpl 序列的所有元素自动执行此类操作?(我想知道 Vector 但我认为任何 mpl 序列类型都可以有一个通用答案)

0 投票
3 回答
430 浏览

c++ - Using boost::mpl, how can I get how many template classes are not "Empty", and call some macro with this number?

I want to call a macro with some arguments depending on the result of boost::mpl::eval_if (or a similar function) that could give how many template arguments are not empty. Say we have some pseudocode like the following:

I am trying to fill my class with some content depending on how many arguments are EmptyType. I wonder how such thing can be done in C++03 via Boost.MPL/Preprocessor or some other Boost library?

0 投票
3 回答
1940 浏览

c++ - boost::mpl typelist 函数应用

我有一个函数,我想对类型列表中的所有类型执行(当前由 mpl 列表表示——这甚至是一种合理的方法吗?)

这里的关键是该函数只关心类型,而不关心实际数据;它调用该类型的静态函数来检索一些信息,然后将其推入哈希表以供以后参考。

但是,据我所知, mpl 没有这样做的方法 --- 我能找到的最接近的是 mpl for_each 运算符,但它似乎希望用于每种类型的实际实例化,不是类型本身。

Loki 库有一个“应用”函数,这或多或少是我正在寻找的——它通过将指向类型列表中的类型的指针作为参数传递来解决实例化问题,以帮助推断,但不做完全实例化。我应该在 MPL 中查看什么来获得该功能?还是我错过了一些明显的东西?

0 投票
2 回答
99 浏览

c++ - 更改派生类的模板参数

在下面的代码中,C 的基类 B1 的模板参数 OFFSET 依赖于 B0,而 B2 依赖于 B1。

这是通过在每次创建 C 实例时手动编写代码来完成的(在 main 方法中)。有没有办法将此功能转移到 C 的定义中?

编辑:

为了回答评论,我认为需要采取以下步骤来解决这个问题:

  • 编写一个可以改变偏移量的元函数:set_new_offset,它为 T 定义类型 T<2>

  • 使用 boost::mpl::times 计算新的偏移量

  • 添加更多模板魔术...

0 投票
2 回答
348 浏览

c++ - 收集稍后应在宏中调用的函数列表

我正在编写一个小型库,使用它 C++ 中的枚举应该变得更容易。语法类似于:

此宏创建一个 MyEnum 类,例如允许以下访问:

以及更多功能,例如将附加数据(例如字符串)存储到枚举值。

宏已经完成并且可以工作,但并不像上面显示的那样容易定义。为此,我需要一种方法来创建带有 ENUM_VAL 宏的初始化函数列表,以便稍后调用。类似于以下 boost::mpl 方法:

这样 list##(__COUNTER__-1) 最终包含类型 Init##Name ,我最终可以使用 mpl foreach 对所有存储类型调用 init() 。

现在的问题是命名。每个宏实例化我必须使用 __COUNTER__ 两次,这会使计数器增加两次。我已经搜索并发现

  • 命名变量时,C 预处理器不计算 (__COUNTER__-1)
  • 如果不增加它,就无法读取 __COUNTER__ 。

所以我需要另一种方法来收集我以后可以调用的函数列表。