Передача переменной в лямбду - PullRequest
0 голосов
/ 07 мая 2019

У меня есть функция, которая принимает в качестве аргумента CallbackType, то есть

typedef (*void) (const *char, bool)

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

CallbackType DelegateHandler(Pointer ptr) {
    return [&](const char* a, bool b) {
        callback(ptr, a, b); 
    };
}

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

no known conversion for argument 1 from SetHandler(Pointer)::<lambda(const char*, bool)>’ to ‘CallbackType’ {aka ‘void(*)(const char*, bool)’ 

Любая идея, как решить эту проблемупо-простому?

Ответы [ 2 ]

3 голосов
/ 07 мая 2019

Как уже указывалось Майкл , замыкания не могут быть преобразованы в указатели функций.

Может быть лучше принять шаблонный аргумент или std::function вместо необработанного указателя функции, если есть такая опция.

0 голосов
/ 07 мая 2019

Лямбда-функции, содержащие захваты, не могут быть преобразованы в обычные указатели функций. Проверьте это и это ТАК вопрос для более.

Как правило, у вас есть обратный вызов, который позволяет вам включить передаваемый пользовательский указатель, который будет содержать дополнительные данные, которые вы хотите получить от обратного вызова.

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