如何在移动到 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)()
。
备注:
- 确保在括号中加括号,以便在尝试调用该函数之前取消对指针的引用;调用运算符的优先级高于解引用运算符。
- 你不应该再依赖移动的对象。也就是说,永远不要在您的代码中尝试在该移动之后直接调用
func()
。这是未定义的行为。你真的不知道移动对象的状态。
我不知道如何调用已移入 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()
。这是未定义的行为。你真的不知道移动对象的状态。