Последний ответ @Brandon правильный. Вот длинная версия:
Я думаю, что на сайте MSDN есть лучшее объяснение того, как анализировать лямбда. См.: https://docs.microsoft.com/en-us/cpp/cpp/lambda-expressions-in-cpp
Я собираюсь переписать ответ вашего профессора с небольшим количеством пробелов для удобства чтения:
std::function<int(int)> ptr = [] (int num) -> int {return num + 100;};
Давайте проанализируем его в соответствии с Рецепт MSDN:
1
. [] предложение захвата: ничего от вызывающего не захватывается. Зачем использовать список захваченных элементов вместо того, чтобы помещать те же элементы в список параметров? Это очень хороший ответ SO. В данном примере ничего не фиксируется, поскольку вы просто выполняете операцию с переданным параметром.
2
. Список параметров: одиночный int. Это должно быть знакомо. Функция, принимающая параметр int
.
5
. Тип возвращаемого значения: я думаю, что было бы неплохо предоставить спецификацию типа возвращаемого значения, особенно когда тип является ссылкой. Меня это уже кусало. Часто тип возврата просто подразумевается сигнатурой функции.
6
. Тело лямбды: { return num + 100; }
Как и у обычной функции. Это простой пример, и часто лямбды имеют небольшую текстовую длину. Но это может быть очень сложно.
Наконец, лямбда-тип возвращается как std :: function <> type. Большинство людей будут использовать здесь auto
. Скорее всего, ваш профессор пытается помочь, показывая вам типы вовлеченных
Ну, я только что написал длинный рассказ. Я предлагаю прочитать эту ссылку SO на другой вопрос лямбда и прочитать MSDN do c. Страница MSDN хороша тем, что на ней не используются такие слова, как «предикат», и все излагается на диаграмме.