生活随笔
收集整理的这篇文章主要介绍了
C++学习——模板
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
文章目录
- 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++模板是什么,底层怎么实现的?
编译器并不是把函数模板处理成能够处理任意类的函数;
编译器从函数模板通过具体类型产生不同的函数;
编译器会对函数模板进行两次编译:
在声明的地方对模板代码本身进行编译,在调用的地方对参数替换后的代码进行编译。
这是因为函数模板要被实例化后才能成为真正的函数,在使用函数模板的源文件中包含函数模板的头文件,如果该头文件中只有声明,没有定义,那编译器无法实例化该模板,最终导致链接错误。
总结
以上是生活随笔为你收集整理的C++学习——模板的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。