文章目录
- 1.C++模板
- 2.C++模板是什么,底层怎么实现的?
1.C++模板
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。
模板是创建泛型类或函数的蓝图或公式。
库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。
每个容器都有一个单一的定义,
比如 向量,我们可以定义许多不同类型的向量,比如 vector <int> 或 vector <string>。
#include <stdio.h>
#include<iostream>
using namespace std;template <typename T1,typename T2>
void print(T1 value1,T2 value2){cout << "value=" << value1+value2 << endl;
}template <class T1,int SIZE>
class solution {
public:void print(T1 value) {cout << "value=" << value << endl;}void set(int i, int value) {if (i >= SIZE) {cout << "error" << endl;}else {array[i] = value;}}void print_array() {for (int i = 0; i < SIZE; i++) {cout << array[i] << " ";}cout << endl;}
private:int array[SIZE];
};
int main()
{print(23,23.23);print(23.67, 9);solution<double,5> s;s.set(0, 7);s.set(1, 2);s.set(2, 5);s.set(3, 19);s.set(4, 67);s.print_array();return 0;
}
2.C++模板是什么,底层怎么实现的?
编译器并不是把函数模板处理成能够处理任意类的函数;
编译器从函数模板通过具体类型产生不同的函数;
编译器会对函数模板进行两次编译:
在声明的地方对模板代码本身进行编译,在调用的地方对参数替换后的代码进行编译。
这是因为函数模板要被实例化后才能成为真正的函数,在使用函数模板的源文件中包含函数模板的头文件,如果该头文件中只有声明,没有定义,那编译器无法实例化该模板,最终导致链接错误。