引数は関数ポインタでなければならないと主張しますか? そうでなければ、それはただの可能性があります
template <class F>
void DoToAll(F f) {
std::for_each(v.begin(), v.end(), f);
}
それはすべてのf
セントで機能します。はベクトルの要素であり、有効ですf(x)
。x
つまり、 や などの関数ポインタとファンクタは問題std::function
ありstd::bind
ません。残念ながら、メンバー関数ポインターは ではなく で呼び出すため、含まれていませx->*f()
んf()
。しかし、メンバー関数ポインターを、呼び出しを正しく転送するファンクターにラップすることで、これも克服できます。標準ではすでにそのようなアダプターが提供されています。適切なものはmem_fun_ref_t
. DoToAll
関数ポインターを取るオーバーロードを追加できます。
template <class This, class Ret>
void DoToAll(Ret (*This::f)()) {
std::for_each(v.begin(), v.end(), std::mem_fun_ref(f));
}