我目前正在使用虚幻引擎上的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 (*)()
如何将一个函数指针从我的一个类发送到另一个类?
答案 0 :(得分:4)
void (B::*)()
是指向非静态成员函数的指针,而void (*)()
是指向非成员函数的指针。两者之间没有转换。
使B::Foo
静态可以解决这个问题。但是,您无法访问B
的实例成员。
请注意,使用函数指针(成员或非成员)是传递函数对象的旧样式。更现代的方法是使用std::function
个对象,这些对象可以通过对象和其中一个成员函数的组合来构造。
答案 1 :(得分:0)
如果您希望让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宏