繁体   English   中英

如何将void(myClass :: *)()转换为void(*)()

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM