Я заметил, что lambdas работают с указателями функций, а также с выделенным типом function
, используя g++
.
#include <functional>
typedef int(*fptr)(int, int);
int apply_p(fptr f, int a, int b) {
return f(a, b);
}
int apply_f(std::function<int(int, int)> f, int a, int b) {
return f(a, b);
}
void example() {
auto add = [](int a, int b) -> int {
return a + b;
};
apply_p(add, 2, 3); // doesn't give an error like I'd expect it to
apply_f(add, 2, 3);
}
Мой вопрос: какие из них наиболее идиоматичны? И каковы опасности и/или преимущества использования одного над другим?