前回書いた,C++14のgeneric lambdaを使ってみるの補足.
いろんな型につかえること.Generic.
どういうことかというと,std::vector
例えば,これまでのだと,
std::vector<int> idata;
std::vector<double> ddtata;
auto fi = [](int x){ std::cout << x << std::endl; };
auto fd = [](double x){ std::cout << x << std::endl; };
std::for_each(idata.begin(), idata.end(), fi);
std::for_each(ddata.begin(), ddata.end(), fd);
とか,
std::vector<int> idata;
std::vector<double> ddata;
auto fi = [](int x, int y){ return x > y; };
std::sort(idata.begin(), idata.end(), fi);
auto fd = [](int x, int y){ return x > y; };
std::sort(idata.begin(), idata.end(), fd);
という風に,扱う配列の型ごとに用意しないといけなかった.
それが,C++14からは,まとめて1つにできる.上の例だと,
std::vector<int> idata;
std::vector<double> ddtata;
auto f = [](auto x){ std::cout << x << std::endl; };
std::for_each(idata.begin(), idata.end(), f);
std::for_each(ddata.begin(), ddata.end(), f);
や
std::vector<int> idata;
std::vector<double> ddata;
auto f = [](auto x, auto y){ return x > y; };
std::sort(idata.begin(), idata.end(), f);
std::sort(idata.begin(), idata.end(), f);
となる.