我有一个函数数组,稍后将作为回调:
std::vector<std::function<void(void*)>> callbacks;
我确实需要向此向量插入其他类型的函数,这就是为什么我选择void *作为参数。
在这些功能之一中,我需要一个整数,所以我做到了:
void MyObject::MyTestCb(void* params) {
int i = *(int*)params;
...
}
...
callbacks.push_back(std::bind(&MyObject::MyTestCb, this, std::placeholders::_1));
当我调用这些回调时,首先我尝试这样:
int index = 73;
void* params = (void*)&index;
callbacks[x](params);
但是有时我没有在回调函数中收到该值!大多数时候都获得零。可能与安装在64位计算机上有关吗?
无论如何,我然后尝试了这种方式:
void* params = new int(73);
callbacks[x](params);
delete params;
经过一些测试,我根本没有发现任何问题。但是,这最后的方法是正确的方法吗?它应该支持任何类型的参数吗?