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

Pass a function pointer of an overloaded member function?

本文关键字:函数 指针 成员 重载      更新时间:2023-10-16

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

void repaint()

我试着:

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

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

Then I try

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

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

  • "对绑定成员函数表达式的无效操作"
  • "myObject::myObject不接受3个参数"

如何正确传递?

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

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

BTW: void in参数表是多余的

    由于某种原因,您放弃了类作用域-使用&myclass::repaint来获得指向成员的指针,就像在第一个代码中一样。
  1. 成员函数类型为void (myclass::*)()
    所有指针到成员类型都指定了类。

(参数列表(void)为C-ism。除非你想让它看起来很老,否则还是不写为好。