知らなかった。std::bindとstd::mem_fnはデータメンバを束縛して関数風にアクセスすることが出来ます。もちろんそのスコープでアクセス可能なデータメンバに限ります。
#include <functional> #include <iostream> struct X { int data = 3; }; int main() { X x; auto x1 = std::bind(&X::data, x); auto x2 = std::mem_fn(&X::data); std::cout << x1() << std::endl; std::cout << x2(x) << std::endl; }
実行結果
Start 3 3 0 Finish
std::bindとstd::mem_fnの違いですが、std::bindはbind時にインスタンスを束縛した関数オブジェクトを返し、std::mem_fnはインスタンスを第1引数にとる関数オブジェクトを返します。