如何在移动到 shared_ptr 后调用 std::function

How to call std::function after move to shared_ptr

我不知道如何调用已移入 shared_ptr 的 std::function…

#include <iostream>
#include <functional>

using func_type = std::function<int()>;

int main(int, char*[])
{   
    func_type func = [] () { return 42; };
    std::cout << func() << "\n"; // -> 42
    auto sp_func = std::make_shared<func_type>(std::move(func));
    // how do we now call the function?
}

如有任何正确方向的(智能)指示,我将不胜感激。

好吧,您刚刚创建了一个指向您的函数的(智能)指针。 要访问该对象,您所要做的就是 取消引用 该指针,然后返回您的函数。

在这种情况下,您应该只使用 (*sp_func)()

备注:

  1. 确保在括号中加括号,以便在尝试调用该函数之前取消对指针的引用;调用运算符的优先级高于解引用运算符。
  2. 你不应该再依赖移动的对象。也就是说,永远不要在您的代码中尝试在该移动之后直接调用 func()。这是未定义的行为。你真的不知道移动对象的状态。