問題タブ [boost-range]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
55 参照

c++ - コンテキストをキャプチャするための追加のパラメーターを持つ boost::range::transform のバージョンを作成する方法

たとえば、私はベクトルを持っています

と構造体

そして私は次のことをしたい

ただし、上記はboost(1.55)のバージョンと私が使用する必要があるコンパイラのバージョン(VS-2010)ではコンパイルされません。問題は、ラムダが参照によって変数をキャプチャするときに、変換アダプターが代入コンストラクターを使用しようとしてしまうことです。これは違法であり、コンパイルに失敗します。ただし、何もキャプチャされない場合は、すべて機能します。

私の素朴な解決策は、トランスフォームを別のオーバーロードでラップすることです。

これは std ライブラリが好むパターンのようです。たとえば、std::lower_boundはこのパターンを使用します。

しかし、それを行う方法を考えようとするとすぐに、元の変換関数をラップしようとするテンプレートの狂気に行き詰まります。必要なオーバーロードを生成する方法を誰かが教えてくれたら、それを必要な他のオーバーロードに当てはめることができると確信しています。

別の解決策は、ラムダを使用する代わりに、各関数に完全なファンクターを使用することですが、少なくともキャプチャされていないラムダを使用できる場合、これは醜いです。