помощью конструктора или с помощью метода другого класса. Я хочу по чекбоксу вызывать нужный вариант. Придумал решение в виде лямд. Есть 2 ламбды:
auto transformMsg = [&CalcMath =m_1_5kta, &msg](void) { return KtaInfo(msg); };
transformMsg = [&CalcMath =m_1_5kta, &msg](void){return CalcMath.RecalcUm(msg);};
При отжатии чекбокса вариант получения меняется. Но во втором случае приравнивание не работает. Пишет:
------.cpp:108:38: error: no viable overloaded '='------.cpp:107:46: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from '(lambda...' to 'const (lambda ... for 1st argument
Почему я не могу приравнять лямбды? У них ведь все одинакого кроме тела
у них нет оператора = и нет оператора копирования
посмотри что там вместо auto
Копирование есть. Присваивания нет.
копирования нет, он deleted)
void test(int a) { auto l = [&a](){}; auto l2 = l; } Компилятор не согласен: https://godbolt.org/z/Y8v9ach3a
void, кстати, там необязателен в плюсах
Не совсем понял что ты хочешь. Ты хочешь получить какой то тип? Тебе совсем не обязательно передавать прям тип, ты можешь отдать тому, кому нужен этот тип просто функцию. Не обязательно лямбду. Просто определи функцию, которая отдает требуемый тип (эта функция в своем теле создаст требуемый тип, если надо наполнит его данными и вернет наружу). Ты же отдашь тому, кому нужен тот тип, отдаешь не тип, а эту функцию. То есть это как будто тебе нужен дом и ты звонишь мне и говоришь пришли мне дом, я говорю не могу он не пройдет по почте, я тебе шлю инструкцию (функцию), ты тупо просто выполни все что в ней написано и получишь дом.
Обсуждают сегодня