11

boost::fusion および boost::mpl ライブラリは初めてです。これら2つのライブラリの主な違いを教えてください。

今までは 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と融合の間に違いはありますか? あるライブラリが別のライブラリよりも優先されるシナリオはありますか?

返信ありがとうございます。

4

2 に答える 2

10

Fusion (2 つのうちの新しい方) の紹介から:

STL コンテナは値を操作します。MPL コンテナーは型で動作します。Fusion コンテナーは、型と値の両方で機能します。

純粋な型の計算を行う場合は、融合よりも MPL を選択してください。静的型の計算が完了すると、ランタイム部分のフュージョン シーケンス (変換を参照) をインスタンス化できます。

あなたの例では、どちらの方法でも機能します。より複雑なニーズがある場合は、Fusion が (実行時に) 何か特別なことをしてくれるかもしれません。しかし、現状では、MPL に固執します。

于 2011-06-25T20:45:43.227 に答える
1

Boost.Fusionは、コンパイル時のデータ構造とそのランタイムインスタンスの間のギャップを埋めるためにあります。これは基本的に、関連するアルゴリズムを備えたセマンティックが豊富なタプルのようなデータ構造のライブラリです。

于 2011-06-26T13:37:57.620 に答える