Альтернативами указателям на функции являются параметры std :: function и template / generi c функторы. Все это влияет на ваш код по-разному.
Вы можете передавать лямбда-коды в код, который ожидает либо std :: function, generi c функторы, либо указатели на функции. Удобно иметь единую концепцию в вызывающем коде, которая бы согласованно поддерживала все эти различные концепции интерфейса, и, в конце концов, удобство - это все, лямбды - вот что. *
указатели на функции являются наименее универсальным понятием из приведенных выше, поэтому не каждую лямбду можно превратить в указатель на функцию. Предложение захвата должно быть пустым. Префикс лямбды с
+
явно преобразует их в указатель на функцию, если это возможно, т. Е. В следующем фрагменте
f
имеет тип
int (*)( int )
:
auto f = +[]( int x ) { return x; };