
項目 34:std::bind よりもラムダを優先する
|
239
ここからはホップ、ステップ、ジャンプです。と言っても最後のジャンプは、C++14 のラムダで
は可変長仮引数が可能な点を利用した、完全転送するラムダが任意の個数の仮引数を受け取れるよ
うにする 6 つの点です(2 箇所にある「...」)。
auto f =
[](auto&&... xs)
{
return
normalize(std::forward<decltype(xs)>(xs)...);
};
重要ポイント
•
auto&& 仮引数を std::forward する場合は decltype を用いる。
項目 34:std::bind よりもラムダを優先する
C++11 の std::bind は C++98 の std::bind1st、std::bind2nd の後継となるものですが、2005
年から非公式ながら標準ライブラリに加えられていました。標準化委員会が、bind 仕様を含んだ
TR1 という文書を取り込んだ時からです(TR1 の bind は名前空間が異なり、std::bind ではなく
std::tr1::bind とされていました。また、一部インタフェースの細部も異なります)。このような
経緯があるため、すでに 10 年もしくはそれ以上の std::bind 使用経験を持つプログラマもいます。
読者も長い std::bind 経験を持っているならば、これまで充分使用できていた道具の使用を止める
のは気乗りしないかもしれません。変化 ...