深入模板编程笔记一

来源:互联网 发布:在线制作纪念册 源码 编辑:程序博客网 时间:2024/05/27 00:40

第一章就简单介绍


     模板参数的自动推导:

       

template<typename t1, typename t2, typename t3, typename t4> void fun(t1 a, t2 b, t4 c)fun<double, int, int>(1, 2, 3) //用typeid测试后,发现省却参数的自动推导是按照顺序的。也就是说double int int只确定了t1 t2 t3的类型,然后函数的传人参数却有一个t4类型,由于没有传人模板,编译器便通过传人参数c自动推导t4的模板(这里是int).fun<double, char, char>(2,"char",anytype)

    模板默认值:

template<typename t1 = int, typename t2>


    模板函数、类体:


通过网上知道,模板的实现是随用随生成的。没有真实函数实现代码,所以定义和声明放入头文件中。讨厌的话可以用export改变。

//声明template<typename T>T fun(T v)//定义tempalte int fun(int v)//作者表示编译器会自动寻找合适模板实现,但是测试没成功



为模板编写唯一名

    

//caller1.cpp#include<iostream>tempalte<typename T>void fun(t v) {   std::cout<<"func1"<<v;}void caller1() {   fun(1);   fun(0.1);}//caller2.cpp#include<iostream>tempalte<typename T>void fun(t v) {   std::cout<<"func2"<<v;}void caller2() {   fun(1);   fun(0.1);}//main.cppvoid caller1();void caller2();int main() {   caller1();   caller2();   return 0;}//测试发现链接器链接时基于函数名、模板实参列表、参数列表判断函数模板实例等价。所以最先创建的fun函数只要模板和后面的一样,为了方便会继续调用那个fun函数,不会另外开辟。

0 0