[英]Is it possible to call a method pointer with a void* pointer to the object
[英]Is it possible to call a member function with its pointer and a void object pointer?
仅拥有指向特定实例的void*
指针和returnType(*function)(parameters)
函数指针时,是否可以使用特定对象实例调用成员函数?
#include <iostream>
class testClass
{
public:
int classNum;
testClass(int _num) : classNum(_num) {}
void testFunction(int _num) { std::cout << _num + classNum << "\n"; }
};
int main()
{
testClass instance(3);
void(*function)(int) = (&testClass::testFunction); // edit: this is wrong, but "&test::testFunction" is the information provided nonetheless
void* instancePtr = (void*)&instance;
// can we call "testFunction(3)" on "instance" with only "function" and "instancePtr"?
}
没有; 您有两个问题:
指向成员函数的指针类型错误,并且不会绑定到(&testClass::testFunction)
。
对象指针的类型已删除。 您可以将其从void*
testClass*
回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);
}
不过,您的选择实际上取决于您要执行的操作。
您需要将指针类型更改为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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.