当前位置: 首页 > ai >正文

C++模板知识点6『拆分模板参数』

1、为什么要拆分模板参数?
如下代码试图遍历数组,但很显然是错误的:

template<typename T>
void funcArray(T &arr) {int size = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < size; ++i) {qDebug() << arr[i];}
}

拆分模板参数的目的,是为了获得更多模板参数的信息,包括参数类型和参数数量,如下:

// 数组拆分,获得数组元素类型和数量
template<typename T, int N>
void funcArray(T(&arr)[N]) {for (int i = 0; i < N; ++i) {qDebug() << arr[i];}
}

C++STL标准库提供的vector则可以拆分其元素类型,其元素数量由vector.size函数即可获得,如下:

template<typename T>
void funcArray(std::vector<T> vec) {for (int i = 0; i < vec.size(); ++i) {qDebug() << vec[i];}
}

其他拆分的示例如下:

// 函数指针拆分,获得函数返回值类型、参数类型和数量
template<typename R, typename... Args>
void function1(R(*f)(Args...), Args... args) {f(args...);
}// 函数对象拆分,获得函数返回值类型、参数类型和数量
template<typename R, typename... Args>
void function2(std::function<R(Args...)> f, Args... args) {f(args...);
}// 成员函数指针拆分,获得函数返回值类型、参数类型和数量,还有类/结构的类型
template<typename R, typename S, typename... Args>
void function3(R(S::*f)(Args...), S *s, Args... args) {(s->*f)(args...);
}
http://www.xdnf.cn/news/17170.html

相关文章:

  • 任务进度状态同步 万能版 参考 工厂+策略+观察者设计模式 +锁设计 springboot+redission
  • C++ 类和对象(2)
  • 顺序表——C语言
  • C++之队列浅析
  • SpringBoot学习日记 Day5:解锁企业级开发核心技能
  • 亚马逊采购风控突围:构建深度隐匿的环境安全体系
  • 剧本杀小程序系统开发:推动社交娱乐产业创新发展
  • TikTok Shop冷启动破局战:亚矩阵云手机打造爆款账号矩阵
  • 项目构想|文生图小程序
  • 人工智能2.0时代的人才培养和通识教育
  • 动手学深度学习(pytorch版):第一节——引言
  • Redis学习总结(持续更新)
  • 【45】C++函数重载是什么?函数重载需要注意什么?为什么C++支持函数重载,C语言不支持函数重载?C++和C语言代码之间如何相互调用?
  • 仓库管理系统-20-前端之记录管理的联表查询
  • 2025最新国内服务器可用docker源仓库地址大全(2025年8月更新)
  • 深入剖析Java线程:从基础到实战(上)
  • 上海一家机器人IPO核心零部件依赖外购, 募投计划频繁修改引疑
  • AI绘画:生成唐初李世民全身像提示词
  • idea工具maven下载报错:PKIX path building failed,配置忽略SSL检查
  • 打造交互界面 —— Popup 的艺术
  • 使用萤石云播放视频及主题模版配置
  • 设计模式 观察者模式
  • 软件测试中,pytest 的 yield 有什么作用?
  • Day32--动态规划--509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
  • 第一个vue应用
  • 【性能测试】---测试工具篇
  • JavaSE---异常的经典面试题
  • Git `cherry-pick` 工具汇总
  • 数组指针-函数指针-回调函数
  • 大屏数据展示页面,数据可视化可以用到的框架和插件