Лямбда, и передача значений в нее

388
10 января 2018, 18:56

Узнал что в WNDCLASS можно передать лямбду в качестве lpfnWndProc, и да, передать ее можно. Тут же подумалось мне что можно передать какие-то локальные значения в лямбду, но не тут то было. Простая лямбда, да, а вот с передачей значений по ссылке нет. Можно как то исправить ситуацию?

не существует подходящей функции преобразования из "lambda []LPARAM (HWND, UINT, WPARAM, LPARAM)->LPARAM" в "WNDPROC"

// Так пожалуйста
wc.lpfnWndProc = [](HWND, UINT, WPARAM, LPARAM) -> LRESULT {};
// Так нельзя.
wc.lpfnWndProc = [&](HWND, UINT, WPARAM, LPARAM) -> LRESULT {};
Answer 1

Нельзя. В общем случае средств closure, которые в итоге формируют "обычный" указатель на функцию в языке нет. Лямбда тут не поможет - как только появился не пустой capture, лямбду больше уже нельзя преобразовать в обычный указатель на функцию.

READ ALSO
Открыть файл как двоичный код

Открыть файл как двоичный код

Всем привет! Я пишу программу, которая осуществляет шифрование файлов и текста с помощью логических операцийА именно - XOR, OR и AND

418
Динамический массив (С++)

Динамический массив (С++)

Разве arrWithDigits-это массив? Это же переменная, хранящая его адресПочему мы работаем с указателем как с массивом в этой строчке arrWithDigits[i] = i + 1;?

403
sfml проблема с правами доступа при чтении

sfml проблема с правами доступа при чтении

Проблема видна на скринеВсе библиотеки подключены правильно

257
как указать компаратор std::map

как указать компаратор std::map

Хотел создать переменную типа map<string, vector<string>>, но чтобы пары в словаре хранились не по возрастанию, а в порядке добавления в словарьПолагаю,...

365