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

iis如何建立网站bt磁力种子搜索引擎

iis如何建立网站,bt磁力种子搜索引擎,中国科技成就2019,免费微信小程序开发官网前引:在泛型编程的工程实践中,C模板机制是构建类型安全、高性能代码的核心基础设施。本文深入探讨模板系统的三项高阶特性:​非类型模板参数通过编译期常量扩展模板的数学表达能力;类模板特化实现针对特定类型的算法优化与内存布局…

前引:在泛型编程的工程实践中,C++模板机制是构建类型安全、高性能代码的核心基础设施。本文深入探讨模板系统的三项高阶特性:​非类型模板参数通过编译期常量扩展模板的数学表达能力;类模板特化实现针对特定类型的算法优化与内存布局控制;模板分离编译则破解多文件协作中的符号重定义难题。通过剖析这些特性背后的编译原理与应用场景,开发者将掌握构建STL级组件的关键技术,提升元编程框架的设计维度 

目录

typename的作用

非类模板参数

使用

模板的特化

特化的步骤

使用

函数模板全特化 

类模板全特化

类模板偏特化

模板分离编译

例如:

原因:

解决方案:


typename的作用

typename 通常出现在模板中,与 class 可以自由更换,例如:

template<class T, typename T>

但是有一个场景是必须使用 typename 的。例如我们打印某个容器里存的数据,可以使用迭代器:

vector<int> 在这里的作用:这是一个实例类型让编译器去这里面寻找,因为这里是双冒号“::” 

我们也可以使用模板参数 代替 这个实例的类型,但是必须加 typename,例如:

解释:

对于编译器来说:T::const_iterator 可能是两种东西:

​(1)一个类型 (比如:typedef, using, 嵌套类):​​ 这是我们想要的,用于声明迭代器变量 it

(2)一个静态成员变量 (比如:int Myless::const_iterator):​​ 这是我们想要的,如果把它当           成类型来声明变量,显然是错误的。例如静态成员变量:

C++ 的语法允许这两种情况存在,编译器​默认解析规则:​​ 在模板定义中,当编译器遇到一个嵌套于依赖类型(如 T)中的名称(如 const_iterator)时,它的默认行为是假定这个名称不是一个类型,而是一个静态成员变量或枚举值(或者成员函数等非类型实体)。这是编译器的保守策略!

非类模板参数

顾名思义,这个参数不是类模板参数(class T 或者 typename T)

这种参数可以是(我们暂时只学整型,其它类型也是同样的用法)

整型​(包括 int, char, long 等)

枚举类型​(enum

指针​(对象指针、函数指针、成员指针等)

引用​(对象引用、函数引用)

浮点类型​(C++20起,如 float, double

Literal 类类型​(C++20起,需满足特定条件)

使用

在类模板参数(函数模板也是一样)中支持使用整型模板参数:

template <typename T, int Size> // Size是非类型模板参数
class Array 
{T data[Size]; // 使用编译期常量Size
};

实例化时需要多传一个参数:

// 使用
Array<int, 10> intArray; // 实例化为int[10]
Array<char, 8> charArray; // 实例化为char[8]

例如函数模板中使用非类模板参数:

//函数非类模板参数
template<class T,int N>//N是非类模板参数
void Print(T a, T b)
{T date[N] = { 0 };
}

实例化时多传一个参数即可:

Print<int, 8>(9, 10);

模板的特化

通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结 果,需要特殊处理,比如:实现了一个专门用来进行小于比较的函数模板

//比较模板
template<class T>
bool less(T& a, T& b)
{return a < b;
}

这个模板可以比较任意两个数的大小,整型、浮点型、字符、字符串等,但是如果我想传地址,让它们比较两个地址的数据内容,同样是比较,我们要去单独开一个模板?这时候就需要特化处理

特化的步骤

(1)必须要先有一个基础的函数模板(即原模板,这里我们下面拿例子讲解)

(2)关键字 template 后面接一对空的尖括号 <>

(3)函数名后跟一对尖括号,尖括号中指定需要特化的类型

(4)函数形参表: 必须要和模板函数的基础参数类型完全相同,如果不同编译器可能会报一些奇             怪的错误

使用
函数模板全特化 

全特化即是将模板参数列表中所有的参数都确定化(没有偏特化)

比如这是一个基础的模板:

//基础比较模板
template<class T>
bool less(T a, T b)
{return a < b;
}

那么我们全特化之后,可以这么写:

//特化模板
template<>
bool Less<const int*>(const int* p1, const int* p2)
{return *p1 < *p2;
}

注意:如果在基础模板中有使用“引用”的,编译器可能发生一些奇怪的报错,去掉引用即可,例如

原因:我们基础版的模板是引用类型的,但是特化出来的不是引用类型,所以报错

类模板全特化

例如类模板:

//类模板
template<class T1,class T2>
class Less
{Less(){cout << "类模板" << endl;}
};

全特化版本(将所有类模板参数都确定化):

//全特化
template<>
class Less<int, double>
{Less(){cout << "全特化类模板" << endl;}
};
类模板偏特化

对部分模板参数特化:

//偏特化
template<class T1>
class Less<T1, double>
{Less(){cout << "全特化类模板" << endl;}
};

模板分离编译

在传统C++编程中,我们通常将函数声明放在头文件(.h)中,实现放在源文件(.cpp)中。但对于模板,这种分离会导致编译器无法实例化模板,从而产生链接错误。其根本原因在于:

(1)模板是"蓝图"而非实际代码

(2)模板实例化发生在编译阶段

(3)编译器在生成模板代码时需要完整的定义

(4)链接阶段无法解决未实例化的模板符号

例如:

现在有这样一个模板,我们将它的声明和定义分离

template<class T1,class T2>
class Less
{
public:void Print();void push_back();void push_front();
};

在另一个文件中写出函数定义:

template<class T1,class T2>
void Less<T1,T2>::Print()
{cout << "Print()" << endl;
}template<class T1,class T2>
void Less<T1,T2>::push_back()
{cout << "push_back()" << endl;
}template<class T1,class T2>
void Less<T1,T2>::push_front()
{cout << "push_front()" << endl;
}

但是我们在实例化->调用函数的时候,编译器无法实现:

原因:

编译器工作流程:
(1)编译main.cpp -> main.o 
         看到MyContainer<int>声明
         但未看到实现 -> 期望链接时解决

(2)编译my_template.cpp -> my_template.o
         包含模板实现
         但没有具体类型实例化 -> 不生成任何实际代码

(3)链接器工作:
         找不到MyContainer<int>::add()和printAll()的实现
         报"undefined reference"错误

所以:主要问题出现在定义实现的文件还是模板,并没有实例化,导致报错

解决方案:

(1)这种是最常用的一种,将声明和定义写在一起

(2)使用显示实例化我们的定义(除非特化,否则只需要写一个实例即可!):

可以看到是没有问题可以通过编译的:

如果是在自定义空间使用的模板声明和定义的分开,指定空间域即可:

 

                                                【雾非雾】期待与你的下次相遇! 

http://www.dtcms.com/wzjs/361083.html

相关文章:

  • 怎样建立自己购物网站seo管家
  • 南京做网站yuanmus聊城网站推广公司
  • 做网站需要懂什么谷歌seo网站运营
  • 重庆长寿网站设计公司百度搜索资源管理平台
  • 做我的世界壁纸网站南山网站seo
  • 网站开发怎样建立后台数据seo网站排名优化教程
  • 太原cms建站模板微博营销的特点
  • 深圳均安网站制作广州seo优化排名公司
  • 广州开发网站建设关键词推广方法
  • 宝安做棋牌网站建设哪家好刚刚传来最新消息
  • wordpress生成验证码发送代码资源优化排名网站
  • 石家庄网站建设加q.479185700seo外链网
  • 上海公安门户网站户口事项申请表seo排名快速优化
  • 随州网站建站独立站seo外链平台
  • 上海 网站建设尚硅谷培训机构官网
  • 长春做网站seoseo研究中心骗局
  • 建设工程考试官方网站外贸获客软件
  • 山西 网站建设百度指数官网入口登录
  • 哪个公司网络最快海淀区seo搜索优化
  • 网站团队的建设济宁百度推广公司
  • 上海响应式网站建设费用百度经验怎么赚钱
  • 建个人网站需要哪些b站好看的纪录片免费
  • 网站cms企业厦门seo排名
  • 网站可以微信支付是怎么做的郑州网站seo优化公司
  • wordpress图片去水印网站推广优化的原因
  • 我的世界做弊端网站婚恋网站排名前10
  • 南京 公司网站制作网页设计网站
  • 太原做网站的网络工作室营销心得体会感悟300字
  • dedecms织梦系统网站防会员注册机网络营销师证书需要多少钱
  • 免费的旅游网站模板西安今日头条新闻