【问题标题】:How to call the lambda stored in pointer to the `std::function`?如何调用存储在指向`std::function`的指针中的lambda?
【发布时间】:2020-10-18 16:35:49
【问题描述】:

我有一个指向 std::function 的指针,其中存储了 lambda。 我怎么称呼那个 lambda?

示例:

std::function <void()>* fx = new std::function <void()>([] {std::cout << "Hello world;\n"; });
    //here i need to call my fx, just fx(); does not works in this case

fx可以存储在std::pair

【问题讨论】:

  • (*fx)(); 但是你为什么使用指向 std::function 的指针。似乎是个糟糕的选择。
  • @super 答案应该出现在答案框中。请...
  • 阅读一些good C++ programming 的书并查看this C++ reference。另请阅读 C++ 编译器的文档(可能是 GCC...)。喜欢 smart pointers 而不是原始的

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


【解决方案1】:

您可以通过以下方式之一调用它:

  1. 解引用指针并调用

    (*fx)();
    
  2. 或显式调用 std::function&lt;R(Args...)&gt;::operator()

    fx->operator()();  // explicitly calling the `operator()`
    
  3. 或使用 std::invoke

    std::invoke(*fx); // needed C++17 or later
    

但是,您应该重新考虑使用指向 std::function 的指针,这通常不是必需的。


fx 可以存储在std::pair

这实际上并不重要,因为您需要首先获取该对的元素(即pair.firstpair.second)并调用存储的 lambda,如上所述。例如,如果pair.second 是您的fx

(*pair.second)();

【讨论】:

    猜你喜欢
    • 2011-06-13
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 2016-05-18
    • 1970-01-01
    • 2016-04-18
    相关资源
    最近更新 更多