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

Pass a function pointer of an overloaded member function?

我想传递我的函数 repaint() 的函数指针,它在 3 个版本中被重载。我想不带任何参数地通过:

void repaint()

我试过了:

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

但是编译器说 "I don't know which Version to choose"。好的。

然后我尝试了

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

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

如何正确传递?

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

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

顺便说一句:参数列表中的 void 是多余的。

  1. 您出于某种原因放弃了 class 范围 - 使用 &myclass::repaint 获取指向成员的指针,就像在您的第一个代码中一样。
  2. 成员函数的类型是void (myclass::*)()
    所有指向成员的指针类型都指定 class.

(参数列表(void)是C派,最好留空,除非你想看起来很老。)