wordpress后台logo,长沙网站优化外包,iis做的网站如何添加播放器,wordpress地方门户主题一、什么是模板 C中的模板分为类模板和函数模板#xff0c;并不是一个实际的类或函数#xff0c;这指的是编译器不会自动为其生成具体的可执行代码。只有在具体执行时#xff0c;编译器才帮助其实例化。
二、为什么引入模板 拿我们最常见的交换函数来举例子#xff0c;如果…一、什么是模板 C中的模板分为类模板和函数模板并不是一个实际的类或函数这指的是编译器不会自动为其生成具体的可执行代码。只有在具体执行时编译器才帮助其实例化。
二、为什么引入模板 拿我们最常见的交换函数来举例子如果我们编写一个交换int类型变量的函数如下
bool Swap(int a, int b) {int c a;a b;b c;return true;
} 但如果我们想要编写一个通过函数来交换float的函数我们又要写另一个函数如下
bool Swap(float a, float b) {float c a;a b;b c;return true;
} 那接下来如果需要交换doublecharbool甚至一些结构体或者类的交换函数那么我们的工作量就会很大。细心观察会发现其实上边两个函数唯一不同的便是交换的变量类型不同如果我们把变量类型设置为一个抽象的X在具体需要交换的时候再去根据具体的类型去自动适应这便是C的template模板的巧妙之处。
三、使用方式 C模板采用template关键字修饰
3.1 函数模板 具体写法如下
template typename 参数类型1, typename 参数类型2...
返回值类型 函数名称(形参1, 形参2...) {函数体
}上边代码的typename关键字也可以用class代替。下边给出一个交换函数模板的例子
template typename T
bool Swap(T a, T b) {T c a;a b;b c;return true;
} 3.2 类模板 具体写法如下
template typename 模板名称1, typename 模板名称2...
class 类名称{类成员
}注意在实例化类模板对象时需要在类的结尾加上具体模板名称。 比如以下例子
template typename T1, typename T2
class NNUM {private :T1 num1;T1 num2;public :NNUM(T1 num1, T1 num2) {this-num1 num1;this-num2 num2; }void print_NNUM(T2 str) {cout str : [ str ] endl;cout num1 : this-num1 , num2 : num2 endl;}
}; 这里是一个用了2个模板类型T1和T2的类模板那么我们在实例化时候就要按照以下代码将具体需要使用的T1与T2类型体现出来
NNUMint, string n1 NNUMint, string(123, 456);