コンパイル時にN次元ボックスの形状を指定すると(例えば、(2,3,2)
:3D
)、コンパイル時にすべての座標の組み合わせのタプルを生成したいと思います。 (0,0,0) (0,0,1) (0,1,0) (0,1,1) (0,2,0) (0,2,1) (1,0,0) (1,0,1) (1,1,0) (1,1,1) (1,2,0) (1,2,1)
コンパイル時の座標生成
質問は、私は数日前に掲示別の1(link)に関係なく、hana
のために再定式化されます。私はhana::tuple
オブジェクトの不変性を尊重するアルゴリズムを思いつくのが難しいようです。私はhana
アルゴリズムの組み合わせが再帰呼び出しを生成し、同時に返されたタプルを収集できることを認識できません。
コンパイル時に座標を使用できるようにする必要がありますか(たとえば、テンプレートをインスタンス化するなど)?あなたは何を達成しようとしていますか?ループを最適化しようとしているのであれば、そうしないでください。通常のループで 'std :: array'を使うと、オプティマイザはその仕事をします。そうでなければ 'hana :: cartesian_product'を使います。 –
テンプレートをインスタンス化するには、コンパイル時に座標が必要です。しかし、ネストされたループを手動でアンロールすることで、私があなたが推測したことを行っていたのでテンプレートが必要になります。最初は 'std :: array'を使ってアルゴリズムを実装しました。しかし、私はどのくらい私がコンパイラを信頼すべきか分からなかった。そのため、メタプログラミングを使用して別のバージョンを実装しようとしたところ、パフォーマンスに大きなメリットがあるかどうかを確認しました。 –