c++ - 移动到 shared_ptr 后如何调用 std::function
问题描述
我被困在如何调用已移动到 shared_ptr 中的 std::function ...</p>
#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()
在移动之后直接调用。这是未定义的行为。您并不真正知道移动对象的状态。
推荐阅读
- c++ - 如何更改 unordered_map 中的键?
- dynamics-crm - 如何更新 Dynamics CRM 状态代码/状态代码选项集排序顺序?
- azure - 为 Application Insights 配置的 Azure Log Analytics 显示长时间执行评估
- python-2.7 - flask-jwt-extended 始终为 /login 请求提供相同的令牌
- video - 在 kartik-v/yii2-widget-fileinput 中显示视频缩略图
- python - 使用 Python 3 将带有格式的文本从 ArcGIS 地图服务器查询复制到文本文件,同时保持格式?
- android-studio - 找不到参数的方法 create() [crashlyticsStoreDeobsMyketRelease ...]
- python - Netezza In-Built AGE 用作 Redshift 中的 UDF
- c - scanf("%[^:]]", word) 如何在 C 中工作
- html - 如何根据列表实现按钮?