如何指定指向重载函数的指针?

如何指定指向重载函数的指针?

我想将重载的函数传递给std::for_each()算法。例如,

class A {
    void f(char c);
    void f(int i);

    void scan(const std::string& s) {
        std::for_each(s.begin(), s.end(), f);
    }};

我希望编译器能够解析f()迭代器类型。显然,它(GCC 4.1.2)没有做到这一点。那么,我如何指定f()我想要?


UYOU
浏览 561回答 3
3回答

互换的青春

你可以用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));&nbsp;或者,你也可以这样做:// 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博士的文章中给出的解决方案.
打开App,查看更多内容
随时随地看视频慕课网APP