11

我是 boost::fusion 和 boost::mpl 库的新手。谁能告诉我这两个库之间的主要区别?

到目前为止,我只使用了 fusion::vector 和其他一些简单的东西。现在我想使用 fusion::map 或 MPL::map 但我不知道如何选择合适的。

我需要将简单类型映射到复杂类型(alisa 类型)。目前我有以下片段,两者都完全符合我的需要。

提升::融合:

typedef boost::fusion::map<
    boost::fusion::pair<AliasNames::test1,int>,
    boost::fusion::pair<AliasNames::test2,double>,
    boost::fusion::pair<AliasNames::test3,float>
> TmapAssociations1;

typedef boost::fusion::result_of::value_at_key<TmapAssociations,AliasNames::test1>::type t;

升压::MPL:

typedef boost::mpl::map<
    boost::mpl::pair<AliasNames::test1,int>,
    boost::mpl::pair<AliasNames::test2,double>,
    boost::mpl::pair<AliasNames::test3,float>
> TmapAssociations2;

boost::mpl::at<TmapAssociations2,AliasNames::test1>::type t2;

MPL和融合有什么区别吗?是否存在一个库比另一个库更受青睐的情况?

谢谢您的回复。

4

2 回答 2

10

从 Fusion 的介绍(两者中较新的):

STL 容器处理值。MPL 容器适用于类型。Fusion 容器适用于类型和值。

在进行纯类型计算时选择 MPL 而不是融合。静态类型计算完成后,您可以为运行时部分实例化一个融合序列(请参阅转换)。

在您的示例中,任何一种方式都有效。如果您有更复杂的需求,也许 Fusion 会为您做一些额外的事情(在运行时)。但就目前而言,我会坚持使用 MPL。

于 2011-06-25T20:45:43.227 回答
1

Boost.Fusion 可以弥补编译时数据结构与其运行时实例之间的差距。它基本上是一个带有相关算法的语义丰富的类元组数据结构库。

于 2011-06-26T13:37:57.620 回答