2017-01-05 10 views
1

私はある種のメタベクトル/リンクリストを探しています。 mpl :: vectorのようなものがこれを実行する最良の方法でした。しかし今、花があります。残念ながら私は何らかのhana :: vectorを見つけることができません。私はmpl :: vectorのアダプタを見ました。だからそれはmpl :: vectorがやっている最善の方法だということですか?ブーストmpl :: vectorとhana

ハナはコンパイルがかなり速かったので、私は好きでした。しかし、mplはそれほど速くはありません、本当にmpl :: vectorを自分でコードする必要がありますか?

+1

['hana :: tuple'](http://www.boost.org/doc/libs/1_62_0/libs/hana/doc/html/structboost_1_1hana_1_1tuple.html)はなぜあなたのために機能しませんか? –

+0

'mpl :: *'のものはかなり古く、pre-C++ 11です。例えば、単純なパラメタパックの展開によって、今日よりも多くのことが 'mpl'の再帰的なテンプレートを通して行われています。それは現代のコードよりもかなり遅くなるでしょう。そして、そうです、C++ 14で 'vector'をコーディングすることはケーキの一種であり、' mpl :: vector'が充実していなければ簡単に行うことができます。 – SergeyA

答えて

3

boost::hana::tupleは、タイプ/値の異種「リスト」が必要な場合は、mpl::vectorの十分な代替品にする必要があります。

boost::hana::atで特定のインデックスのアイテムにアクセスし、boost::hana::appendのアイテムを追加し、boost::hana::removeなどで削除できます。

mpl::vectorのインターフェイスに1対1の対応がない場合でも、上記のプリミティブを使用していくつかのユーティリティ関数を実装するのは簡単です。あなたがタイプのリストが必要な場合は


、あなたはhana::tuple(hana::type_c<Types>...)ための構文糖である、boost::hana::tuple_tを使用する必要があります。

+0

'mpl :: vector'は型のリストであり、値ではありません。これは 'hana :: tuple'とは異なります。 – SergeyA

+1

'boost :: hana'型は値です - これはライブラリの中核的な原則です。例えば。 'hana :: make_tuple(hana :: type_c 、hana :: type_c )' –

+0

他の選択肢がないようです:)今は、std :: tupleがC++で十分でないかどうかをチェックします。ありがとう –

関連する問題