作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在 Unreal Engine 上开发一个 C++ 项目,但我无法解决这个问题。
class A
{
public:
void (* array[10])();
//Add Function to an array
void AddFunctionToArray(void(*function)());
};
class B
{
public:
A a;
//Sending a B function to A
void SendMyFunction();
void Foo();
};
void B::SendMyFunction()
{
a.AddFunctionToArray(&B::Foo);
}
我收到错误:无法将 void (B::*)() 转换为 void (*)()
如何将函数指针从我的一个类发送到另一个类?
最佳答案
void (B::*)()
是指向非静态成员函数的指针,而 void (*)()
是指向非静态成员函数的指针-成员函数。两者之间没有转换。
将 B::Foo
设为静态可以解决这个问题。但是,您将无权访问 B
的实例成员。
请注意,使用函数指针(成员或非成员)是传递函数对象的旧式。一种更现代的方法是使用 std::function
对象,可以由对象及其成员函数之一的组合构造。
关于c++ - 如何将 void (myClass::*)() 转换为 void (*)(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46228653/
我是一名优秀的程序员,十分优秀!