Я получил массив функций, которые позже будут вызываться как обратные вызовы:
std::vector<std::function<void(void*)>> callbacks;
Мне нужно вставить различные функции в этот вектор, поэтому я выбираю void * в качестве аргумента.
В одной из этих функций мне был нужен int, поэтому я сделал это так:
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;
И после некоторого тестирования я не обнаружил никаких проблем вообще.Тем не менее, это последний способ, чтобы сделать это правильно?Должен ли он поддерживать какой-либо тип в качестве аргумента?