为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
UYOU 2019-07-12 10:39:38
如何指定指向重载函数的指针?我想将重载的函数传递给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()我想要?
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

你可以用static_cast<>()指定哪个f根据函数指针类型所隐含的函数签名使用:


// Uses the void f(char c); overload

std::for_each(s.begin(), s.end(), static_cast<void (*)(char)>(&f));

// Uses the void f(int i); overload

std::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); overload

void (*fpi)(int) = &f;

std::for_each(s.begin(), s.end(), fpi); // Uses the void f(int i); overload

如果f是一个成员函数,那么您需要使用mem_fun,或者对于您的情况,使用Dobb博士的文章中给出的解决方案.


查看完整回答
反对 回复 2019-07-12
  • 3 回答
  • 0 关注
  • 560 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信