c ++: ввод лямбда-выражения - PullRequest
0 голосов
/ 10 января 2019

У меня есть следующий код:

auto x_is_valid = [](const MyX &x) -> bool {
    return x.source != MyXValue::ABC;
};

auto objects = var_.var_in_box(*a, b, c, x_is_valid);

Мне интересно:

  • Как вычисляется x_is_valid?
  • Где он берет свой входной параметр?

Как мне правильно это прочитать?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Математическая аналогия может помочь. Представьте себе функцию f(x) = x^2.

Как вычисляется f? 1006 *

Все верно: для любого x формула вычисления равна f(x) = x^2.

Где он берет свой входной параметр?

От звонящего.

Приведенные выше «ответы» довольно бессмысленны, но если вы понимаете их в контексте функции в математическом смысле, они могут быть полезны.

0 голосов
/ 10 января 2019

Если var_.var_in_box, ожидается, что bool будет последним аргументом, то вызов

auto objects = var_.var_in_box(*a, b, c, x_is_valid);

должно привести к ошибке компиляции.

Если приведенная выше строка компилируется без какой-либо ошибки, то последним типом аргумента, указанным выше, является вызываемый объект, а не bool. Предположительно, функция использует переданный вызываемый объект для вызова функции. По опубликованному коду невозможно определить, как вызывается вызываемый элемент в реализации var_in_box функции-члена класса.

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