模板的意义是用一套代码解决多个类型的问题,也就是说提出一套公共代码实现同一个功能,在使用不同的参数时,对应的函数功能相同;
重载是改变原有运算符的含义,让其有新的用途。
模板函数和模板结构体的区别是,模板函数只能单独调用;模板结构体/类可以生成对象,然后通过对象来调用,同时里面可以封装更多的重载的或者普通函数,功能相对会更强大一些。
#include <iostream>
using namespace std;
//模板结构体,里面有一个私有变量a和一个重载运算符()的函数,该函数需要传入一个参数,其功能是比较结构体对象的私有变量a的类型和传入的参数类型是否一致。
template <class reqT>
struct IsEqualType
{
template <class inputT>
bool operator()(inputT t)
{
if (typeid(a) == typeid(inputT))
return true;
else
return false;
}
bool isSameType(int t)//普通方法
{
if (typeid(b) == typeid(t))
return true;
else
return false;
}
private:
reqT a;
int b;
};
//模板函数,功能是打印传入的参数的类型
template <class T>
void Prt(T t)
{
cout << typeid(T).name() << endl;
}
int main()
{
int k = 0;
char c = 0;
IsEqualType<char> iet; //构造一个结构体对象,并用char类型来实例化其中的私有变量a
cout << iet(k) << endl; //调用()运算符,来判断k的类型和iet中的a的类型是否一致。
cout << iet(c) << endl;
cout << iet.isSameType(k)<< endl;//调用普通方法。
Prt(k);
Prt(c);
return 0;
}