0
点赞
收藏
分享

微信扫一扫

C++模板template

waaagh 2022-01-26 阅读 107

C++模板template_ios

引言

在c++入门中,很多人会接触swap(int&, int&)这样的函数类似代码如下:

C++模板template_函数模板_02

 这个函数只支持int参数,那么float、long等怎么办呢,函数重载需要好几个函数,很麻烦,我们可以使用模板

函数模板

模板函数定义的一般形式如下所示:

template <typename 类型占位符>   返回值类型占位符 函数名(参数列表) { 函数的主体 }

注意:typename等价于class

#include <iostream>

template<typename T> void swap(T& t1, T& t2) { //函数模板的定义
T tmpT;
tmpT = t1;
t1 = t2;
t2 = tmpT;
}


int main() {
int num1 = 1, num2 = 2;
swap<int>(num1, num2);//函数模板的调用
std::cout << "num1=" << num1 << "," << "num2=" << num2 << std::endl;


return 0;

}

如果函数模板写在不同文件中,在.h文件的尾部要导入.cpp文件

类模板 

格式为:

template<class 形参名,class 形参名,…>

class 类名{ ... };

#include <iostream>

//类模板的定义
template<class T,class T1>
class A {
public:
A(T a, T1 b) :m_i(a), m_f(b) {}
T m_i;
T1 m_f;
void print() {
std::cout << m_i << std::endl;
std::cout << m_f << std::endl;
}
T print1() {
return m_i + 100;
}
};


int main() {

A<int, float> aa(10,55.6);//创建对象
aa.print();
int x = aa.print1();
std::cout << "x=" << x<<std::endl;


return 0;

}

如果在类模板外实现函数体(h和cpp文件分开)时,注意书写格式:

template<class T,class T1> void A<class T,class T1>::print() { }
说明:template<class T,class T1>   是模板帽子
   A<class T,class T1> 是编译后相应的类名

函数模板作为类模板成员

#include <iostream>


template<class T>
class A {
public:
A(T a) :m_i(a){}
T m_i;

//成员函数模板
template <class T1>
void Func(T1 t) {
std::cout << t<<std::endl;
}

};


int main() {

A<int> aa(10);
aa.Func(89.6); //成员函数模板Func被实例化


return 0;

}


举报

相关推荐

0 条评论