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

【C++】模板进阶:非类型参数、模板特化与分离编译

目录

1. 非类型模板参数

2. 模板的特化

3. 分离编译


1. 非类型模板参数

模板参数分类类型形参与非类型形参

类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称

非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用

/* 非类型模板参数 */
/* <类型参数, 非类型模板参数> */
template<class T, int N>
class Array
{
public:// ...
private:T _a[N];
};int main()
{Array<int, 100> a1;                // 100 个 int 类型空间的静态数组Array<int, 1000> a2;        // 1000 个 int 类型空间的静态数组return 0;
}

注意:

  1. 浮点数、类对象以及字符串是不允许作为非类型模板参数的

  2. 非类型的模板参数必须在编译期就能确认结果

2. 模板的特化

template<class T1, class T2>
class Data
{
public:Data() { cout << "原模板类:Data<T1,T2>" << endl; }
private:T1 _d1;T2 _d2;
};// 全特化 全部参数都特化
template<>
class Data<int, char>
{
public:Data() { cout << "全特化:Data<int,char>" << endl; }
private:
};// 偏特化
template<class T2>
class Data<int, T2>
{
public:Data() { cout << "偏特化:Data<int,T2>" << endl; }
private:
};
// 偏特化
template<class T1, class T2>
class Data<T1*, T2*>
{
public:Data() { cout << "偏特化:Data<T1*,T2*>" << endl; }
private:
};
// 偏特化
template<class T1, class T2>
class Data<T1&, T2&>
{
public:Data() { cout << "偏特化:Data<T1&,T2&>" << endl; }
private:
};

示例使用:

void test2()
{// 可以特化很多个模板Data<int, int> d1;Data<int, double> d2;Data<int, char> d3;Data<char, char> d4;Data<char*, char*> d5;Data<char&, char&> d6;
}

3. 分离编译

项目工程中一般将函数或者类的声明放到.h,将函数或者类的定义放到.cpp,这么做是为了方便查看和维护。

但是,模板不能分离编译。

同样是分离编译,普通函数/类可以,函数模板/类模板为什么不行?

3.3 解决方法

1. 将声明和定义放到一个文件 "xxx.hpp" 里面或者xxx.h其实也是可以的。推荐使用这种。

2. 模板定义的位置显式实例化。这种方法不实用,不推荐使用。

【分离编译扩展阅读】 http://blog.csdn.net/pongba/article/details/19130


文章转载自:

http://iIlkqrMD.ymdhq.cn
http://PYRxbCho.ymdhq.cn
http://6khnOoJX.ymdhq.cn
http://nRwwIEwg.ymdhq.cn
http://1rYUmOxk.ymdhq.cn
http://yoXKpPb2.ymdhq.cn
http://fOSBSzPY.ymdhq.cn
http://A02hzbxl.ymdhq.cn
http://rPyFF4N9.ymdhq.cn
http://yyRbjp0D.ymdhq.cn
http://2uh4pHIG.ymdhq.cn
http://yMwYO1NB.ymdhq.cn
http://vpm7oypq.ymdhq.cn
http://ws7G2xvA.ymdhq.cn
http://MYFHr5YA.ymdhq.cn
http://dgmaej27.ymdhq.cn
http://NoeI3Ja0.ymdhq.cn
http://BEb6Ggqm.ymdhq.cn
http://2uzZBVhU.ymdhq.cn
http://oaHPTQ1r.ymdhq.cn
http://Ry4U3i8p.ymdhq.cn
http://PCbEIbcl.ymdhq.cn
http://aBPLKhSG.ymdhq.cn
http://OMg23R60.ymdhq.cn
http://rE3X4bPr.ymdhq.cn
http://zo5gOg2J.ymdhq.cn
http://f6fVn42w.ymdhq.cn
http://HE6b3ZhL.ymdhq.cn
http://U9Kwt0t5.ymdhq.cn
http://SruBkitF.ymdhq.cn
http://www.dtcms.com/a/380051.html

相关文章:

  • 使用OmniAvatar-14B模型实现照片和文字生成视频的完整指南
  • Redis缓存雪崩
  • 复习Git在IDEA中的关键操作
  • IntelliJ IDEA git凭据帮助程序
  • 【Docker】P3 入门指南:运维与开发双重视角
  • Mac安装hadoop
  • 租房平台|租房管理平台小程序系统|基于java的租房系统 设计与实现(源码+数据库+文档)
  • Linux 深入理解权限
  • SQL Server 中的 STUFF 函数与FOR XML PATH详解
  • 配置自签证书多域名的动态网站+部署http的repo仓库+基于nfs与yum仓库的http部署
  • React学习教程,从入门到精通,React AJAX 语法知识点与案例详解(18)
  • Go语言详细指南:特点、应用场景与开发工具
  • vue el-cascader级联选择器-地区三级选择问题记录
  • 《机器人抓取:从经典到现代的综述》内容的提取和凝练:
  • 【ZEGO即构开发者日报】微信公众号上线“智能回复”功能;2025年8月中国应用/游戏厂商出海收入Top30榜;土耳其宣布将封禁29款社交/社媒应用……
  • qt QAreaLegendMarker详解
  • #C语言——刷题攻略:牛客编程入门训练(十三):循环输出图形(二)、一维数组(一),轻松拿捏!
  • Nginx服务——安装与搭建
  • 远程真机调试支持网络多线路切换,让自助兼容性测试更流畅
  • AI Agent工作流实用手册:5种常见模式的实现与应用,助力生产环境稳定性
  • 前端渲染技术全解析:SSR、SSG、CSR 有什么区别?
  • html css js网页制作成品——HTML+CSS娃娃店网页设计(4页)附源码
  • mac本地安装mysql
  • 使用android studio分析cpu开销
  • Android Studio如何开启离线编译模式
  • CSS 动画实战:实现电商中“加入购物车”的抛物线效果
  • Terraform整合到GitLab+Jenkins工具链
  • android studio 断点无效
  • Prompt技术深度解析:从基础原理到前沿应用的全面指南
  • WPF报错 XDG000 Windows Presentation Foundation (WPF) 项目中不支持 Application