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

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

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

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

Ответ 1

Из introduction Fusion (новый из двух):

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

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

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

Ответ 2

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