スコット・メイヤー氏のEffective Modern C++によると、C++11 C++14でstd::bindを使う意味は殆ど無いらしい。理由はstd::placeholders_とかが可読性を下げるから。
auto func = [](const int &x, const int &y ){ return x*y ;};
std::cout << func(2,3) << std::endl;
こんなラムダがあったとして
using namespace std::placeholders;
auto bindCurried = std::bind(func, 2, _1);
std::cout << bindCurried(3) << std::endl;
こーやってカリー化すると、プレースホルダーがマジ汚い。
_1はこれから作られる関数の第一引数という意味だが、混乱する。
で、カリー化したい場合に何をするかというと、ラムダをさらに使う。
キャプチャでラムダを受けて、定義しているラムダの中でラムダを実行し、引数を一つ埋めるが、一つは定義するラムダの引数をそのままキャプチャしたラムダに渡す。
(何言ってるのかもはやわからんが、以下を見れば一目瞭然)
auto curried = [&func](const int &y){
return func(2, y);
};
std::cout << curried(3) << std::endl;
あー。確かに。std::bind要らねーわ。
ただ、ムーブとテンプレート絡める時はC++11ではまだstd::bindを使わなければいけないことがあるらしいが、C++14ではそれもないらしい。