![](/img/trans.png)
[英]How to convert void (__thiscall MyClass::* )(void *) to void (__cdecl *)(void *) pointer
[英]How to convert void (myClass::*)() to void (*)()
我目前正在虚幻引擎上从事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);
}
我收到错误: can't convert void (B::*)() to void (*)()
如何将函数指针从一个类发送到另一个类?
void (B::*)()
是一个指向非静态成员函数的指针,而void (*)()
是一个指向非成员函数的指针。 两者之间没有转换。
使B::Foo
静态将解决此问题。 但是,您将无权访问B
实例成员。
请注意,使用函数指针(成员或非成员)是传递函数对象的旧样式。 一种更现代的方式是使用std::function
对象,该对象可以由对象及其成员函数之一的组合构造。
如果要让类A从任意的类X执行方法,可以尝试以下操作:
template <typename UserClass>
void A::FireMethod(UserClass* InUserObject, typename TMemFunPtrType<false, UserClass, void(int)>::Type InFunc)
{
(InUserObject->*InFunc)(15);
}
在这种情况下,我们正在调用一个带有单个int作为参数的函数。 B类可以做到这一点:
A* a = myAObject;
a->FireMethod(this, &B::MyMethod);
同
void B::MyMethod(int) {}
希望这对您有所帮助! 如果需要更多信息,可以在虚幻引擎中查看Delegate.h中的AddDynamic宏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.