【问题标题】:Is there any benefit of storing lambda function into std::function? [duplicate]将 lambda 函数存储到 std::function 有什么好处吗? [复制]
【发布时间】:2020-09-11 01:43:05
【问题描述】:

来自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 存储到名称中的优势是什么?

【问题讨论】:

  • 答案是“类型擦除”

标签: c++ c++11 std-function


【解决方案1】:

优点是你不需要知道什么是可调用的类型来存储它。例如,您如何声明可以作为函数调用的事物的std::vector?使用std::function 很简单:

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

您可以轻松地存储在handler_list lambda、显式函数对象或函数指针中,而无需关心它们的实际类型。另一个用途是在类内部:

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

    //...

private:
    std::function<void()> callback;
    //...
};

【讨论】:

  • 感谢您提供最简单的答案,让您最容易理解。
猜你喜欢
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多