仅拥有指向特定实例的.click
指针和void*
函数指针时,是否可以用特定的对象实例调用成员函数?
returnType(*function)(parameters)
答案 0 :(得分:4)
否;您有两个问题:
指向成员函数的指针类型错误,并且不会绑定到(&testClass::testFunction)
。
对象指针的类型已删除。如果您知道它是什么,可以将其从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);
}