错误描述:
 #ifndef LINKQ_GDL_H#define LINKQ_GDL_H#include<type_traits>#include<functional>#include<iostream>#include<utility>#include<memory>namespace gdl {template<class... Args>class Task;//特化一个Tasktemplate<class R, class... Args>class Task<R(Args...)> {public:using value_type = std::function<R(Args...)>;public:Task(value_type&& f) : m_func(std::move(f)) {}Task(value_type& f) :m_func(f) {}R Run(Args&&... args) {return m_func(std::forward<Args>(args)...);  //完美转发.}template<class F>auto Then(F&& f)->Task<typename std::result_of<F(R)>::type(Args...)>{using RetType = typename std::result_of<F(R)>::type;auto func = std::move(m_func);return Task<RetType(Args...)>([f, func](Args&& ... args) {return f(func(std::forward<Args>(args)...));});}void reset(value_type&& func) {m_func = std::move(func);}void reset(value_type& func) {m_func = func;}private:std::function<R(Args...)> m_func;};}#endif
void test_task() {std::shared_ptr<int> sha_a(new int[10] { 10, 9, 8, 7, 6, 5, 45, 89 });//std::shared_ptr<int> arr ( new int[10] { 10, 9, 8, 7, 6, 5, 45, 89 });gdl::Task<std::vector<int>(std::shared_ptr<int>, size_t)> task([](std::shared_ptr<int> arr, size_t sz) ->std::vector<int> {std::vector<int> v;for (size_t i = 0; i < sz; i++) {if (arr.get()[i] % 2 == 0)v.emplace_back(arr.get()[i]);}return v;});//auto ret = task.Then([](std::vector<int> v)->std::vector<int> {//        std::sort(v.begin(), v.end());//        return v;// }).Run(std::move(pa), 10);auto ret = task.Run(sha_a, 10);for (auto e : ret) std::cout << e << " ";std::cout << std::endl;}

然后出现一个错误:

错误分析:
aha!
R Run(Args&&... args) {return m_func(std::forward<Args>(args)...);    //完美转发.}这里的args怎么就是“std::shared_ptr<int> &&”类型了呢?不是未定引用类型呢?
前面不是有   template<class R, class... Args>吗?, 为啥args就确定是“std::shared_ptr<int> &&”呢?
---
---
---
求思......
--
-
原来在我实例化模板Task的时候:gdl::Task<std::vector<int>(std::shared_ptr<int>, size_t)> task([](std::shared_ptr<int> arr, size_t sz) ->std::vector<int> {std::vector<int> v;for (size_t i = 0; i < sz; i++) {if (arr.get()[i] % 2 == 0)v.emplace_back(arr.get()[i]);}return v;});这里的模板参数Args已经被确定下来了: Args == std::shared_ptr<int>所以Run中的参数类型也就确定了!!!自然就不再是universal reference!!!
错误改正:

搞定!!然后我应当如何避免这一现象的出现呢?1.类模板参数在模板实例化时确定,函数模板参数在函数调用时确定2.仔细分析错误。

记录一个关于universal reference, 我犯下的滔天大错。相关推荐

  1. 盖茨透露自己曾犯下4000亿美元的错:给了安卓机会

    比尔盖茨 新浪科技讯 6月24日早间消息,日前,比尔-盖茨在由盖茨支持的风险投资公司Village Global举办的一场活动上发表了讲话.他透露,自己犯下的"最大错误"是给了谷歌 ...

  2. 比尔·盖茨承认犯下 4000 亿美元大错:误给 Google 推出 Android 机会!

    作者 | 素年清时 责编 | 伍杏玲 出品 | 程序人生(ID:coder_life) 近日在Village Global举办的座谈会上,比尔·盖茨(Bill Gates)承认犯下最大的错误就是给了谷 ...

  3. 用java写一个简单的区块链(下)

    用java写一个简单的区块链(下) 2018年03月29日 21:44:35 java派大星 阅读数:725 标签: 区块链java 更多 个人分类: 区块链 版权声明:本文为博主原创文章,转载请标明 ...

  4. 你在职场可能犯下的最大错误

    按部就班地工作,不考虑自我的更新迭代. 这是你在职场可能犯下的最大的错误了.而这种错误的影响,往往要等到你面临失业或者跳槽时才能真正体会到. 很多企业往往会因为一个产品(服务)做得好而在市场上站稳脚跟 ...

  5. 记录一个海思TOE的BUG

    原始引用地址: 记录一个海思TOE的BUG time: 2020.5.3 17:57 发现的过程 ​ 最近在做onvif开发时,有x86的验证的功能没有问题,移动到海思Hi3536上简单运行貌视也很正 ...

  6. 复习Java第一个项目学生信息管理系统 04(权限管理和动态挂菜单功能) python简单爬数据实例Java面试题三次握手和四次挥手生活【记录一个咸鱼大学生三个月的奋进生活】016

    记录一个咸鱼大学生三个月的奋进生活016 复习Java(学生信息管理系统04权限管理和动态挂菜单功能) 改写MainFrame的构造方法 新增LoginFrame的验证登录是否成功的代码 新增Logi ...

  7. 记录一个vue监控屏幕宽度的问题

    记录一个vue监控屏幕宽度的问题 因为今天有查询过如何用vue监控屏幕宽度的问题,搜到的很多都是这样的写法: data() {return {screenWidth: null, //屏幕尺寸};}, ...

  8. 比尔盖茨痛数离婚:我确实出轨犯下大错,爱泼斯坦的事早该听她的

      视学算法报道   编辑:David 拉燕 [新智元导读]与前妻分手一年.离婚九个月后,比尔盖茨再次回应:承认出轨犯下错误,应该为此承担责任,后悔未听前妻建议,不该和爱泼斯坦走得太近. 转眼间,比尔 ...

  9. element做树形下拉_一个基于 elementUi的vue树形下拉框组件

    # wl-vue-select,wl-tree-selectcss # 简介vue 用于vue框架的树形下拉框及带全选的普通下拉框.   node Tree drop-down box for vue ...

最新文章

  1. 关于Quartz的Job 不能被注入以及SpringAop对Job失效
  2. windows上配置jdk环境变量
  3. 她说要介绍10000个开源项目?来!一起监督他!
  4. rtems的GNU(GCC)编译环境配置
  5. Hyperledger Fabric 管道(3) 如何做到数据隔离?
  6. ogg 11.2 for mysql_配置ogg异构mysql-oracle 单向同步
  7. df python 增加数据_【Note】关于玩转数据处理R语言120题的注解(P1-P50)
  8. MVC-RedirectToAction跳转到其他Area
  9. access vba 常量数组赋值_聊聊 VBA 数组的那些坑
  10. postgre数据库下的 NOT NULL 和 空串(虽然有NOT NULL设定,但是可以插入空串'')
  11. 【渝粤教育】国家开放大学2018年春季 0551-22T素描(二) 参考试题
  12. 23. Yii 组件事件
  13. 并查集之Wireless Network(一)
  14. acunetix导出html,关于Acunetix v11 WebUI下不得不说的事情!
  15. svm 10折交叉验证 matlab,怎么用10折交叉验证程序?
  16. 圆梦天宫,英雄凯旋—从神州十三号看IP技术在航天测控通信网的应用
  17. vulfocus——maccms远程命令执行(CVE-2017-17733)
  18. 我的计算机无法远程连接桌面,远程桌面无法连接怎么办?windows 无法使用远程桌面连接的解决方法...
  19. APS计划排程系统和生产排产系统,需要哪些基础资料(一)
  20. 读书笔记: 《亿级流量网站架构核心技术》(开涛的那本)

热门文章

  1. 程霖老师阅读训练:苹果IDFA新政落地在即
  2. JavaWeb项目_SMBMS【狂神说Java】(附上静态资源)
  3. 浅析智慧充电桩云平台的技术设计方案
  4. PNG的增强格式:MNG[转载]
  5. php蜜欧斯,怎么学好php - 蜂蜜柠檬水的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. awk入门(三)--getline用法
  7. Cloneable接口的作用与深入理解深度克隆与浅度克隆
  8. 君子善假于物:多语言开发介绍
  9. 周志华机器学习(二)
  10. 经典的邮件群发情景分析和解决方案