引数は関数ポインタでなければならないと主張しますか? そうでなければ、それはただの可能性があります
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));
}