我是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和融合之间有什么区别吗?是否存在一个库优先于另一个库的情况?
感谢您的回复。
答案 0 :(得分:10)
来自Fusion的introduction(两者中的较新者):
STL容器处理价值观。 MPL容器适用于类型。融合容器适用于两种类型和价值观。
进行纯类型计算时选择MPL over fusion。完成静态类型计算后,您可以为运行时部件实例化融合序列(请参阅转换)。
在您的示例中,无论哪种方式都有效。如果你有更复杂的需求,也许Fusion会为你做一些额外的事情(在运行时)。但就目前而言,我坚持使用MPL。
答案 1 :(得分:1)
Boost.Fusion可以弥补编译时数据结构与其运行时实例之间的差距。它基本上是一个具有语义丰富的元组类数据结构的库,带有相关的算法。