LambdaのC++での退屈なパラメータ宣言を単純化する方法0x?
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> coll;
for_each(coll.begin(), coll.end(), [](vector<int>::value_type n) -> void {});
return 0;
}
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> coll;
for_each(coll.begin(), coll.end(), [](vector<int>::value_type n) -> void {});
return 0;
}
vector<int>::value_type n
ここで、vector<int>::value_type n
は面倒です。私は自動的に正しいタイプのnを推論するための自動のようなユーティリティを持っています。次のようにしてください:
for_each(coll.begin(), coll.end(), [](auto_type n) -> void {});
もっと貪欲になるためには、auto_typeに正しいタイプのnを推論するための引数が必要です。引数は、(スマートな)ポインタまたはコンテナへの参照、またはコンテナのイテレータになります。
親愛なる親愛なる人、それをどうやって実装するのですか?
コンテナがベクトル状でない場合、decltype(coll [0])は無効です。このソリューションはあまり一般的ではありません。 decltype(* coll.begin())はあまりにも醜いです。 – xmllmx
時々、イテレータfor_each(firs、last、[](??? value) - > void {})を保持するだけです。このような場合auto_typeはどうですか? – xmllmx
@xmllmx:あなたは、coll.begin()の簡単なヘルパーを書くことができます。この場合、何らかのauto_typeを記述する際の問題は、ラムダやそのoperator()をテンプレート化できないことです。ここで一般的な答えを得ることは非常に疑問です。 – Puppy