Разница между boost :: MPL и boost :: fusion - PullRequest
10 голосов
/ 26 июня 2011

Я новичок в библиотеках 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 ]

10 голосов
/ 26 июня 2011

Из введения Fusion (более новый из двух):

Контейнеры STL работают на значениях. Контейнеры MPL работают на типах. Контейнеры Fusion работают как с типами, так и со значениями.

При расчете чистого типа выбирайте MPL вместо fusion. Как только вычисление статического типа завершено, вы можете создать последовательность слияния (см. Преобразование) для части времени выполнения.

В вашем примере, так или иначе работает. Если у вас есть более сложные потребности, возможно, Fusion сделает что-то для вас дополнительное (во время выполнения). Но в таком виде я бы придерживался MPL.

1 голос
/ 26 июня 2011

Boost.Fusion предназначен для преодоления разрыва между структурами данных во время компиляции и их экземплярами во время выполнения. Это в основном библиотека семантически богатых структур данных, подобных кортежу, со связанными алгоритмами.

...