Передача аргументов как пустых указателей на функцию - PullRequest
0 голосов
/ 15 апреля 2019

Я получил массив функций, которые позже будут вызываться как обратные вызовы:

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;

И после некоторого тестирования я не обнаружил никаких проблем вообще.Тем не менее, это последний способ, чтобы сделать это правильно?Должен ли он поддерживать какой-либо тип в качестве аргумента?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...