Разница между boost :: MPL и boost :: fusion

Я новичок в библиотеках boost :: fusion и boost :: mpl. Может ли кто-нибудь рассказать мне основное различие между этими двумя библиотеками?

До сих пор я использовал только fusion :: vector и несколько других простых вещей. Теперь я хочу использовать fusion :: map или MPL :: map, но не знаю, как выбрать правильный.

Мне нужно сопоставить простой тип со сложным типом (тип alisa). В настоящее время у меня есть следующие фрагменты, и оба работают именно так, как мне нужно.

boost :: fusion:

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;

boost :: 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 и fusion? Существуют ли сценарии, в которых одна библиотека предпочтительнее другой?

Спасибо за ответ.

10
задан Ludek Vodicka 25 June 2011 в 20:36
поделиться