传递重载成员函数的函数指针?
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);
然后我得到了(抱歉翻译不好):
- "invalid operation on an expression of a bound member function"
- "myObject::myObject no overloaded function accepts 3 arguments"
如何正确传递?
成员函数指针和非成员函数指针不是一回事。您的代码中成员函数指针的类型不正确,请将其更改为
myObject = new Object(static_cast<void(myclass::*)()>(&myclass::repaint);
~~~~~~~~~
顺便说一句:参数列表中的 void
是多余的。
- 您出于某种原因放弃了 class 范围 - 使用
&myclass::repaint
获取指向成员的指针,就像在您的第一个代码中一样。
- 成员函数的类型是
void (myclass::*)()
。
所有指向成员的指针类型都指定 class.
(参数列表(void)
是C派,最好留空,除非你想看起来很老。)
我想传递我的函数 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);
然后我得到了(抱歉翻译不好):
- "invalid operation on an expression of a bound member function"
- "myObject::myObject no overloaded function accepts 3 arguments"
如何正确传递?
成员函数指针和非成员函数指针不是一回事。您的代码中成员函数指针的类型不正确,请将其更改为
myObject = new Object(static_cast<void(myclass::*)()>(&myclass::repaint);
~~~~~~~~~
顺便说一句:参数列表中的 void
是多余的。
- 您出于某种原因放弃了 class 范围 - 使用
&myclass::repaint
获取指向成员的指针,就像在您的第一个代码中一样。 - 成员函数的类型是
void (myclass::*)()
。
所有指向成员的指针类型都指定 class.
(参数列表(void)
是C派,最好留空,除非你想看起来很老。)