
項目 34:std::bind よりもラムダを優先する
|
249
正誤表より補足
(訂正)operator() は const なメンバ関数ですから、boundPW の operator() 内で
は、pw も const になります。しかし、PolyWidget::operator() は const ではない
ため、pw(param) 呼び出しは const オブジェクトに対し非 const メンバ関数を呼び出
そうとしてしまいます。このコードはコンパイルできないはずです。PolyWidget::
operator() を const と宣言するか、または boundPW を mutable なラムダにすれば
解決できます。
もちろんこれは極端な例ですが、C++14 のラムダに対応したコンパイラの普及はすでに始まって
いるため、それも一時的なことでしょう。
2005 年に bind が C++ に非公式に追加された時は、C++98 からの大きな改善でした。しかし C++11
でラムダ対応が追加されたため std::bind は時代遅れの代物と化し、C++14 にいたっては使用する
理由もなくなりました。
重要ポイント
•
std::bind よりもラムダの方が可読性、表現力に優れ、恐らく効率でも勝る。
•
C++11 に限るが、std::bind はムーブキャプチャの実装や、テンプレート化した関数呼び出
し演算子を持つオブジェクトをバインドする際に有用となる場合がある。