网站建设评比办法,济南市住房城乡建设网,建设网站属于什么费用吗,wordpress 关键字内链模板是泛型编程的基础#xff0c;泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器#xff0c;比如迭代器和算法#xff0c;都是泛型编程的例子#xff0c;它们都使用了模板的概念。每个容器都有一个单一的定义#xff0c;…模板是泛型编程的基础泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器比如迭代器和算法都是泛型编程的例子它们都使用了模板的概念。每个容器都有一个单一的定义比如 向量我们可以定义许多不同类型的向量比如 vector int 或 vector string。您可以使用模板来定义函数和类接下来让我们一起来看看如何使用。C 中 typename 和 class 的区别在 C Template 中很多地方都用到了 typename 与 class 这两个关键字而且好像可以替换是不是这两个关键字完全一样呢?相信学习 C 的人对 class 这个关键字都非常明白class 用于定义类在模板引入 c 后最初定义模板的方法为templateclass T......这里 class 关键字表明T是一个类型后来为了避免 class 在这两个地方的使用可能给人带来混淆所以引入了 typename 这个关键字它的作用同 class 一样表明后面的符号为一个类型这样在定义模板的时候就可以使用下面的方式了templatetypename
T......在模板定义语法中关键字 class 与 typename 的作用完全一样。typename 难道仅仅在模板定义中起作用吗其实不是这样typename 另外一个作用为使用嵌套依赖类型(nested depended name)如下所示class MyArray
{ publictypedef int LengthType;
.....
}templateclass T
void MyMethod( T myarr )
{ typedef typename T::LengthType LengthType; LengthType length myarr.GetLength;
}这个时候 typename 的作用就是告诉 c 编译器typename 后面的字符串为一个类型名称而不是成员函数或者成员变量这个时候如果前面没有 typename编译器没有任何办法知道 T::LengthType 是一个类型还是一个成员名称(静态数据成员或者静态函数)所以编译不能够通过。函数模板可以重载只要它们的形参表不同即可。例如下面两个模板可以同时存在templateclass T1, class T2
void print(T1 arg1, T2 arg2)
{coutarg1 arg2endl;
}
templateclass T
void print(T arg1, T arg2)
{cout arg1 arg2 endl;
}如果需要代码分离即 template class 的声明、定义以及 main 函数分属不同文件。例如src_dir
|____MyStack.h
|____MyStack.cpp
|____main.cpp则 main.cpp 文件中需要同时包含 .h 文件和 .cpp 文件不然会出现链接错误。// main.cpp
#include MyStack.h
#include MyStack.cpp// 其他include
// main函数主体 其实举个简单的例子反而更利于新手理解本质。函数模板#include iostream
using namespace std;
template typename T1
void Swap(T1 a, T1 b)
{T1 t a;a b;b t;
}
int main()
{int a 2;int b 3;cout a a ; b b endl;Swap(a,b);cout a a ; b b endl;float c 0.02;float d 0.03;cout c c ; d d endl;Swap(c,d);cout c c ; d d endl;return 0;
}类模板#include iostream
using namespace std;
template typename T
class Op{
public:T peocess(T v){return v * v;}
};
int main()
{Opint opInt;Opdouble opDouble;cout 5 * 5 opInt.peocess(5) endl;cout 0.5 * 0.5 opDouble.peocess(0.5) endl;
}