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

网站内页跳转wap如何制作一个自己的网站

网站内页跳转wap,如何制作一个自己的网站,重庆市区旅游必去景点,vue旅游网站怎么做前引:在泛型编程的工程实践中,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/45229.html

相关文章:

  • 县城做信息网站营销推广的特点是
  • 网站页面建议最近的新闻大事20条
  • asp网站开发好怎么预览网站收录查询方法
  • 中山建网站最好的公司百度搜索关键词技巧
  • 做货代在哪个网站找客源去了外包简历就毁了吗
  • 网站建设 善辉网络外贸建站优化
  • 国内知名网站建设排名北京网站seo
  • 网页设计主题及图片seo网站优化教程
  • 网上商城网站设计百度seo收录软件
  • 公司做网站是com好还是cn好seo网站排名优化工具
  • 日本亲子游哪个网站做的好人民日报评网络暴力
  • 公司做网站的法律依据黑龙江最新疫情
  • 淘宝内部领优惠券的网站怎么建设朋友圈广告推广代理
  • wordpress模板修改服务seo课程培训班费用
  • 网站整站html搜索引擎优化seo方案
  • 前几年做那些网站致富178软文网
  • 利用模板做网站软文代发代理
  • wordpress 显示文章摘要优化大师是什么
  • 中国制造股权投资是真的吗seo排名啥意思
  • tomcat做网站地推拉新app推广怎么做
  • 网站开发怎么配合网站流量分析
  • 专门做优选的网站整站seo排名外包
  • 网页设计与制作介绍网站seo优化排名
  • 闸北区网站设计如何进行seo搜索引擎优化
  • 深圳都信建设监理有限公司网站网站营销策略
  • 台湾门户网站有哪些搜索引擎都有哪些
  • 沧州网站建设哪家好如何做网销
  • 有没有免费的企业邮箱肇庆百度快照优化
  • 优酷网站建设有何特点西安网站制作推广
  • 怎么低成本做网站seo是什么意思广东话