#c 11 #lambda #conditional-operator
#c 11 #лямбда #условный оператор
Вопрос:
Я просто изучаю лямбда-выражение и пытаюсь использовать его для возврата из функции с использованием троичного оператора C . Однако приведенный ниже код не работает с ошибкой!
это упрощенная версия программы для объяснения моей реальной проблемы, поэтому, пожалуйста, отправьте ответ, используя только лямбда-выражение, а не просто return (x y offset).
В функции-члене ‘int Calculator::add(int, int)’: 12:26: ошибка: нет соответствия для троичного ‘operator?:’ (типы операндов ‘bool’, ‘int’ и ‘Calculator::add (int, int)::<lambda()>’) 16:3: предупреждение: управление достигает конца функции, не являющейся недействительной [-Wreturn-type]
#include <iostream>
#include <string>
class Calculator
{
public:
bool initalized = false;
int offset = 0;
int add(int x, int y)
{
return !initalized ? -1 : [this, x, y]()
{
return ((x y) offset);
};
}
};
int main()
{
Calculator c;
c.initalized = true;
c.offset = 1;
printf("%d", c.add(2,10));
}
Что я здесь делаю не так?
Комментарии:
1. Вы должны вызвать лямбда-выражение -1, а лямбда-выражение не имеет общего типа
2. не могли бы вы, пожалуйста, показать мне фрагмент кода?
Ответ №1:
Ваш троичный оператор пытается вернуть значение -1 или лямбда-выражение, которые не имеют общего типа.
На самом деле вам нужно вызвать лямбда-выражение:
return !initalized ? -1 : [this, x, y]()
{
return ((x y) offset);
}(); // <= added ()
Или без лямбда-выражения:
return !initalized ? -1 : x y offset;
Ответ №2:
Что я здесь делаю не так?
Части true / false тернарного выражения несовместимы. Вы не можете преобразовать -1
в лямбда-выражение, и вы не можете преобразовать лямбда-выражение в int
.
Мне не ясно, что вы пытаетесь сделать с лямбда-выражением, но это может быть:
return !initalized ? -1 : (x y this->offset);
Если по какой-либо причине вам необходимо использовать лямбда-выражение, вам придется вызвать лямбда-выражение.
return !initalized ? -1 : [this, x, y]() { return ((x y) this->offset); }();
// missing ^^
Комментарии:
1. Это понятно, я написал упрощенную программу для имитации реальной проблемы. Как кто-то может это сделать с помощью лямбда-функции — это мой вопрос!