boost :: MPL和boost :: fusion之间的区别

时间:2011-06-25 20:36:33

标签: boost boost-mpl boost-fusion

我是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和融合之间有什么区别吗?是否存在一个库优先于另一个库的情况?

感谢您的回复。

2 个答案:

答案 0 :(得分:10)

来自Fusion的introduction(两者中的较新者):

  

STL容器处理价值观。 MPL容器适用于类型。融合容器适用于两种类型和价值观。

     

进行纯类型计算时选择MPL over fusion。完成静态类型计算后,您可以为运行时部件实例化融合序列(请参阅转换)。

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

答案 1 :(得分:1)

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