問題タブ [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.
c++ - コンテキストをキャプチャするための追加のパラメーターを持つ boost::range::transform のバージョンを作成する方法
たとえば、私はベクトルを持っています
と構造体
そして私は次のことをしたい
ただし、上記はboost(1.55)のバージョンと私が使用する必要があるコンパイラのバージョン(VS-2010)ではコンパイルされません。問題は、ラムダが参照によって変数をキャプチャするときに、変換アダプターが代入コンストラクターを使用しようとしてしまうことです。これは違法であり、コンパイルに失敗します。ただし、何もキャプチャされない場合は、すべて機能します。
私の素朴な解決策は、トランスフォームを別のオーバーロードでラップすることです。
これは std ライブラリが好むパターンのようです。たとえば、std::lower_boundはこのパターンを使用します。
しかし、それを行う方法を考えようとするとすぐに、元の変換関数をラップしようとするテンプレートの狂気に行き詰まります。必要なオーバーロードを生成する方法を誰かが教えてくれたら、それを必要な他のオーバーロードに当てはめることができると確信しています。
別の解決策は、ラムダを使用する代わりに、各関数に完全なファンクターを使用することですが、少なくともキャプチャされていないラムダを使用できる場合、これは醜いです。