我被困在如何调用已移入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)()
。
笔记:
func()
。这是未定义的行为。您实际上并不知道移动对象的状态。