私は、典型的な再帰関数を使用せずに、boost::hana
を使って、例えばboost
とstd
ツールを使って最も簡単な方法で変換する方法を知りたいと思います。 (例えば)以下の種類:N要素のタプルからN/2ペアのタプルへ
std::tuple<int, double, char, double>
型のオブジェクトへの:
std::tuple<std::pair<int, double>, std::pair<char, double> >;
私はboost::hana
ドキュメントで探していたが、私は手動でウィットにそれをプログラミングするよりも、それを行うには簡単な方法を発見しましたh再帰的なテンプレート関数(私が理解できなかった花の関数があると言わなければならない)。
注:私は考えていたものは、最初は、その後も、オッズインデックスの二つのグループでそれらをフィルタリングし、0からNまでの整数の範囲(hana::range
)を作成することでした、となって、インデックスの各グループについて、対応する値を設定し、両方のリストに対して関数を適用してstd::pair
...を作成します。これはあまりにも多くのステップであり、手作業で簡単に実装できます。私は花の資料に欠けているものがあると確信しています。再帰なし
私は受け入れ答えは、それを行うための最善の方法だと思います。 'hana :: range'と' hana :: unpack'を使って、少し見栄えを良くすることができますが、基本的に同じです。 –
@LouisDionne私はさまざまな方法で試しました。最短の方法は、 '' hana :: range'を作成し、奇数と偶数のインデックスのパーティションを作成し、 '' hana :: unpack''と '' hana :: zip_with''をペアを作成するファンクタ。他の解決策は、0からN/2の範囲を作成し、それぞれに対応する '* 2'と' * 2 + 1'演算を行う 'hana :: chain'または' 'hana :: transform'を作成し、各インデックスシーケンスについて2回スライスする。あまりにも多くの痛み...;古いスタイルはまだまだ短くなっています。 –
これは私の意味です:https://wandbox.org/permlink/nLG7RC7ieZzK5io4。私が言ったように、それはもっとハナ風ですが、それ以外は本質的に受け入れられた答えと同じです。 –