メンバー関数に加えて、std::mem_fn
データ メンバーもラップして、それらへの読み取りアクセスを許可できます。したがって、次のように動作します。
void print_fooVar(foo& f, std::function<int(foo)> varAccess)
{
std::cout << varAccess(f) << std::endl;
}
foo f;
print_fooVar(f, std::mem_fn(&foo::fooVar)); // prints 0
JonathanWakely がコメントで言及しているように、mem_fn
それ自体によって返される (未指定の) タイプを使用して、データ メンバーを設定できます。
foo f;
std::mem_fn(&foo::fooVar)(f) = 13;
std::function
またはそれを用途に変換する
void bar( foo& f, std::function<int&(foo&)> fooVarSet )
{
fooVarSet(f) = 26;
}
探しているのが、fooVar
データ メンバーを設定するための callable を生成する方法だけでstd::mem_fn
あり、これを行うために特に使用しない場合は、ラムダ式を使用してジョブを完了することもできます。
void bar( foo& f, std::function<void(foo)> funcPtr,
std::function<void(foo&, int)> fooVarSet )
{
funcPtr( f );
fooVarSet(f, 13);
}
foo f;
bar(f, std::mem_fn(&foo::fooFunc), [](foo& f, int i) {f.fooVar = i;});
ライブデモ