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

templates - 在 C++ 中模板化任意长度的类型列表

这是我希望能够输入的内容:

Boost::mpl 有序列,可以让你这样做,但我不想这样做:

我不介意它内部“丑陋”或冗长,但我希望 watchKeys 最终使用的方式非常简单和直观。我也不知道 boost 是如何做到的,但这似乎是因为我和模板之间有一层宏。

我该怎么办?我不希望每种类型的类型制作巨大的模板列表,但如果这是唯一的,那就是唯一的方法......

编辑:我已经相当确定没有办法做我想做的事(几乎,但你不能有可变数量的宏参数),但问题仍然在产生有用和信息丰富的答案。

0 投票
1 回答
496 浏览

c++ - c++递归mpl::equal问题?

我需要一个支持类型递归的类似 mpl::equal 的过程。

上面的编译很好,但是如果我在 mpl::transform 或 mpl::fold 中使用它,visual studio 2010 rc1 会抱怨。

然而,这些工作......

是 mpl::equal 不适用于动态生成的递归类型,还是我的语法有问题?

任何建议将不胜感激。

0 投票
1 回答
5834 浏览

c++ - 如何循环通过 boost::mpl::list?

据我所知,这是

我该如何完成?(我不知道我是否应该使用 std::for_each,只是基于此处另一个答案的猜测)

0 投票
1 回答
445 浏览

c++ - 如何将 mpl::transform 应用于 mpl::string?

我正在尝试将转换应用于mpl::string,但无法编译。我正在使用 MS VC++2010 和 Boost 1.43.0。编码:

我已在http://paste.ubuntu.com/447759/上发布了完整的错误消息。

MPL 文档说mpl::transform需要 a Forward Sequence,并且mpl::string是 a Bidirectional Sequence,我认为它是一种Forward Sequence,所以我认为它会起作用。

我做错了什么,还是这完全不可能?如果是这样,为什么?

谢谢!

0 投票
4 回答
364 浏览

c++ - 拥有可变数量的模板参数的最佳方法是什么?

请考虑这个 - 可能写得不好 - 的例子:

和 :

有了这个,我可以使用以下语法简单地添加一个回调:

它完美无缺。我的“命令”类做了更多所有命令共有的事情,例如实现撤消、重做、进度报告等,但为了便于阅读,我将其从代码中删除。

现在我的问题很简单:有没有办法重写命令类,以便我可以替换这个调用:

通过类似的东西:

我一直在考虑这个问题,但我有一个概念上的问题:我想模板化我的 Command 类,比如

但显然,这里有一个问题:语法template <typename R,typename T1, typename T2, ..., typename Tn>不合法 C++ ,AFAIK。

我是否必须编写 n 个版本的命令,例如:

等等 ?(甚至不确定这是否真的有效)

还是有另一种更优雅的方式来做到这一点?这里提到的语法在那里有用吗?(函数 f;)

我一直在查看 Loki 的类型列表,他们似乎完成了这项工作。但是我在Boost中找不到任何东西。我在网上看到 boost::mpl 是一个想要用来实现类型列表的工具,但我对 MPL 文档有点困惑?

对此有何见解?雷加兹,D.

0 投票
1 回答
693 浏览

c++ - 使用 boost::mpl::lambda 从基于静态 const 成员变量的 boost::mpl::list 中删除类型

我有一个类型列表定义为:

我想创建一个不包含任何水果的第二个列表,即从第一个列表形成的结果列表将包含一个单一类型的 Brick。Fruit 通过定义在类型中的静态 const 变量来识别,例如:

我目前有一个解决方案,涉及创建一个元函数类,并使用boost::mpl::remove_if. 我相信我应该能够通过使用 boost::mpl::lambda 来消除对单独RemoveFruit结构的需求,从而使其更加优雅。关于如何做到这一点的任何建议?

目前的完整代码:

0 投票
3 回答
4138 浏览

c++ - 使用 boost::mpl 的类型组合

我有一个类型列表,我想从中构造包含两个元素的所有组合的列表。例如:

在这里,pair<T1,T2>可能是std::pair<T1,T2>,或mpl::vector<T1,T2>。这该怎么做?当我们考虑到这一点时,我也会有兴趣删除重复项pair<T1, T2> == pair<T2, T1>
谢谢。

0 投票
2 回答
779 浏览

c++ - 如何获取变量的类型?

例子:

谢谢!

0 投票
1 回答
722 浏览

c++ - C ++ boost变体问题

我知道它boost::variant使用boost::mpl了它背后的东西并且有一个与 mpl 兼容的 typedef types

假设我有一个简单的 typedef:typedef boost::variant<bool, int> Variant;

现在我有了另一个模板函数,比如说:

我希望这个函数在两种情况下表现不同:当它的T一部分Variant::types和不是的时候。

显然,我必须做类似的事情

我唯一不知道的是这个CONDITION

现在 - 我确实认为如果TVariant::types.

有人知道怎么做吗?

0 投票
1 回答
2020 浏览

c++ - 从 boost::mpl::vector 获取 boost::fusion::vector 的索引

我开始使用 boost fusion 和 mpl 库,但遇到了一个非常简单的问题。

我声明了以下类型:

现在我想编写一个函数来获取来自 FusionVector 的值。

该函数按预期工作,但我想从 boost::mpl 向量中获取索引并在此函数中使用它,而不是将其作为模板参数传递给函数。但到目前为止我还没有弄清楚如何做到这一点。

有人可以给我一个提示吗?