私のお気に入りのイディオムは次のとおりです。私は "として読み込ま
auto f = [](auto&& x){myfunction(decltype(x)(x));}
x
がタイプx
として宣言されました。
この動作を確認するには、x
がint&&
の場合の処理を調べます。 decltype(x)(x)
は(int&&)(x)
であり、これはx
への参照値を生成する。 x
がint&
である場合は、(int&)(x)
となります。これは参照へのキャストなしです。覚えておいてください、decltype(x)
は参照カテゴリを含みます。
auto f = [](auto&& x){myfunction(std::forward<decltype(x)>(x));}
代替:今
は、auto&&
パラメータに対して、これは短いが、同等です。
auto f = [](auto x){myfunction(decltype(x)(x));}
auto f = [](auto x){myfunction(std::forward<decltype(x)>(x));}
代わり移動-からながらx
それは、余分なコピーを誘発:auto
パラメータについて
。
私は通常のCスタイルがあまりにも危険であるとしてキャストx
がauto&&
変数でない場合は、decltype(x)(x)
は最悪のx
の種類-正しいコピーを作成することができます扱いますが。そして、それを簡潔にするために何か言われることがあります。
コールオペレータテンプレートを使用してlambdaを作成する[C++ 2a](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0428r0.pdf)があります書きやすい。 –
興味深いリンク。答えに直接リンクする価値はありませんか? – skypjack
@skypjack:早期段階の提案の些細で投機的な性質、そしてC++ 14に関する問題であることを考えると、コメントとして残すのが一番良いと思いました。おそらく、これを受け入れるという実際の決定があったら、これを更新することができます(7月?)。 –