你可以用static_cast<>()指定哪个f根据函数指针类型所隐含的函数签名使用:// Uses the void f(char c); overloadstd::for_each(s.begin(), s.end(), static_cast<void (*)(char)>(&f));// Uses the void f(int i); overloadstd::for_each(s.begin(), s.end(), static_cast<void (*)(int)>(&f)); 或者,你也可以这样做:// The compiler will figure out which f to use according to// the function pointer declaration.void (*fpc)(char) = &f;std::for_each(s.begin(), s.end(), fpc); // Uses the void f(char c); overloadvoid (*fpi)(int) = &f;std::for_each(s.begin(), s.end(), fpi); // Uses the void f(int i); overload如果f是一个成员函数,那么您需要使用mem_fun,或者对于您的情况,使用Dobb博士的文章中给出的解决方案.