Анонимные (лямбда) функции в C++

163
30 декабря 2019, 09:20

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

typedef void (*tCallBack)();    // Объявление типа для вызова функции при нажатии
struct tControl {
    uint16_t x1, y1, x2, y2;    // Координаты контрола
    uint8_t autorepeat;         // Разрешение автоповтора
    tCallBack exec;             // Функция, вызываемая при нажатии
};
tControl controls[100];
controls[0].x1 = 200;
controls[0].y1 = 150;
controls[0].x2 = 250;
controls[0].y2 = 200;
controls[0].autorepeat = 0;
controls[0].exec = []()->void{Iref += 0.1;};

Написано согласно Википедии. Но что-то не работает. Компилятор ругается на последнюю строчку (где как раз анонимная функция):

Error: Expected an expression in "main.cpp", Line: 254, Col: 25

Пробовал также вариант:

controls[0].exec = [](){Iref += 0.1};

С тем же результатом.

При этом следующий вариант - работает:

void foo(void){
    Iref += 0.1;
}
controls[0].exec = &foo;

Есть нюанс с компилятором: это онлайн-компилятор MBED - ARM-овский инструмент для написания ПО для встраиваемых платформ на базе ARM. Т.е. что там за C - черт его знает. Судя по всем форумам - 11 версия, так что должна такие конструкции поддерживать. Но я все-таки думаю, что проблема в моих кривых руках, а не в компиляторе.

Поправьте меня пожалуйста в части синтаксиса, если конечно там есть ошибки.

Спасибо!

READ ALSO
winapi SelectObject - DeleteObject - когда нужно удалять обьект

winapi SelectObject - DeleteObject - когда нужно удалять обьект

Вопрос в удалении HGDIOBJ результата возвращаемого функцией SelectObject()

141
Не получается создать службу виндовс

Не получается создать службу виндовс

Делаю лабораторную работуНужно создать программу, которая будет реализовывать со стороны сервера разные функции (создание документа, обновление...

172
Использование new

Использование new

В нескольких примерах на просторах сети можно найти следующие вещиДопустим имеем несколько определений:

165
Задача на С++ олимпиадная

Задача на С++ олимпиадная

Вокруг ведущего стоит N человек, которые пронумерованы по часовой стрелку числами от 1 до NВедущий, начиная с первого отсчитывает M человек...

163