what,什么是模板
顾名思义,就跟PPT模板一样,根据你写入的资料产生不同的PPT,但是格式和画面都是一样的。
c++里的模板也是这个样子,基于你设计的规则,传入数据,最终编译器会产生不同的代码。
why,为什么需要模板
直接看看代码吧,没有模板的c++会是什么样的。
void print(int d)
{
std::cout << d << std::endl;
}
void print(std::string s)
{
std::cout << s << std::endl;
}
void print(double d)
{
std::cout << d << std::endl;
}
int main(int argc, char* argv[])
{
int a = 10;
std::string b = "hello world";
double c = 3.1415;
print(a);
print(b);
print(c);
}
如果有不同的输入,但是函数内部的操作都是一样的,那么完全没有必要写三个几乎一模一样的代码。而且万一之后还有不同的的输入比如vector,deque。这时候太需要一个类似于模板的东西,能够根据我传入的数据,自动生成比配的代码。
how,怎么玩模板
template <typename T>
void print(T d)
{
std::cout << d << std::endl;
}
int main(int argc, char* argv[])
{
int a = 10;
std::string b = "hello world";
double c = 3.1415;
print(a); //隐式推导为int
print(b);
print(c);
}
模板只是一个模板,代码之中的print函数并不实际存在,只有调用这个模板函数的时候,编译器才会生成print函数的实际代码。