1

From 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();
}

What is the advantage of storing a lambda into a name than the previous approach ?

Keith Thompson
  • 254,901
  • 44
  • 429
  • 631
Rahul Das
  • 115
  • 1
  • 6

1 Answers1

2

The advantage is that you don't need to know what is the type of the callable in order to store it. For instance, how do you declare an std::vector of things that can be called as a function? With std::function is easy:

std::vector<std::function<void()>> handler_list;

You can easily store in handler_list lambdas, explicit function objects or function pointers, without caring for their actual type. Another use is inside a class:

class Something {
public:
    void register_callback(std::function<void()> callback)
    {
        this->callback = callback;
    }

    //...

private:
    std::function<void()> callback;
    //...
};
lvella
  • 12,754
  • 11
  • 54
  • 106