是否可以使用其指针和void对象指针来调用成员函数?

时间:2018-10-24 11:03:29

标签: c++ function pointers void-pointers

仅拥有指向特定实例的.click指针和void*函数指针时,是否可以用特定的对象实例调用成员函数?

returnType(*function)(parameters)

2 个答案:

答案 0 :(得分:4)

否;您有两个问题:

  1. 指向成员函数的指针类型错误,并且不会绑定到(&testClass::testFunction)

  2. 对象指针的类型已删除。如果您知道它是什么,可以将其从void*投射回testClass*,但是您将永远不需要将它变成void*,对吗?

总体来说,像lambdas和std::function之类的魔术组合会更好。

这里有些神奇:

int main()
{
    testClass instance(3);

    std::function<void(void*, int)> f = [](void* instancePtr, int _num) {
        static_cast<testClass*>(instancePtr)->testFunction(_num);
    };

    void* instancePtr = &instance;
    f(instancePtr, 42);
}

不过,您的选择实际上取决于您要执行的操作。

答案 1 :(得分:2)

您需要将指针类型更改为void(*function)(void*, int),以便它可以接受指向对象和参数的指针。示例:

int main() {
    testClass instance(3);
    void(*function)(void*, int) = [](void* p, int a) { static_cast<testClass*>(p)->testFunction(a); };
    void* instancePtr = &instance;
    function(instancePtr, 3);
}