传递重载成员函数的函数指针?

时间:2016-08-12 09:25:18

标签: c++ function pointers overloading member-function-pointers

我想传递我的函数repaint()的函数指针,它在3个版本中重载。我想通过一个没有任何参数的那个:

void repaint()

我试过了:

myObject = new Object(&myclass::repaint);

但是编译器说"我不知道选择哪个版本"。行。

然后我试了

myObject = new Object(static_cast<void(*)(void)>(&repaint);

然后我得到了(抱歉翻译不好):

  • &#34;对绑定成员函数的表达式进行无效操作&#34;
  • &#34; myObject :: myObject no overloaded function接受3个参数&#34;

如何正确传递?

2 个答案:

答案 0 :(得分:3)

成员函数指针和非成员函数指针不是一回事。代码中成员函数指针的类型不正确,将其更改为

myObject = new Object(static_cast<void(myclass::*)()>(&myclass::repaint);
                                       ~~~~~~~~~

BTW:参数列表中的void是多余的。

答案 1 :(得分:2)

  1. 由于某种原因,您删除了类范围 - 使用&myclass::repaint获取指向成员的指针,就像在第一个代码中一样。
  2. 成员函数的类型为void (myclass::*)() 所有指向成员的指针类型都指定了类。
  3. (参数列表(void)是一个C-ism。除非你想看起来很旧,否则不要把它留空。)