将 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;
    //...
};