将 lambda 函数存储到 std::function 中有什么好处吗?
Is there any benefit of storing lambda function into std::function?
来自https://en.cppreference.com/w/cpp/utility/functional/function
void print_num(int i)
{
std::cout << i << '\n';
}
int main()
{
// store a free function
std::function<void(int)> f_display = print_num;
f_display(-9);
// store a lambda
std::function<void()> f_display_42 = []() { print_num(42); };
f_display_42();
}
与以前的方法相比,将 lambda 存储到名称中有什么优势?
优点是您无需知道可调用对象的类型即可存储它。例如,如何声明一个 std::vector
可以作为函数调用的东西?使用 std::function
很容易:
std::vector<std::function<void()>> handler_list;
您可以轻松地在 handler_list
中存储 lambda、显式函数对象或函数指针,而无需关心它们的实际类型。另一个用途是在 class:
中
class Something {
public:
void register_callback(std::function<void()> callback)
{
this->callback = callback;
}
//...
private:
std::function<void()> callback;
//...
};
来自https://en.cppreference.com/w/cpp/utility/functional/function
void print_num(int i)
{
std::cout << i << '\n';
}
int main()
{
// store a free function
std::function<void(int)> f_display = print_num;
f_display(-9);
// store a lambda
std::function<void()> f_display_42 = []() { print_num(42); };
f_display_42();
}
与以前的方法相比,将 lambda 存储到名称中有什么优势?
优点是您无需知道可调用对象的类型即可存储它。例如,如何声明一个 std::vector
可以作为函数调用的东西?使用 std::function
很容易:
std::vector<std::function<void()>> handler_list;
您可以轻松地在 handler_list
中存储 lambda、显式函数对象或函数指针,而无需关心它们的实际类型。另一个用途是在 class:
class Something {
public:
void register_callback(std::function<void()> callback)
{
this->callback = callback;
}
//...
private:
std::function<void()> callback;
//...
};