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

Lud*_*cka 10 boost boost-fusion boost-mpl

我是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;
Run Code Online (Sandbox Code Playgroud)

提高:: 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;
Run Code Online (Sandbox Code Playgroud)

MPL和融合之间有什么区别吗?是否存在一个库优先于另一个库的情况?

谢谢你的答复.

Joh*_*nck 10

引进融合(两者的更新)的:

STL容器处理价值观.MPL容器适用于类型.Fusion容器适用于类型和值.

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

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