C++ 模板template和template
原文链接:https://blog.csdn.net/skyleung/article/details/42195509
template<class T>和template<typename T>都可以用来定义函数模板和类模板,在使用上,他们俩没有本质的区别。
在C++早期版本中,没有typename这个关键字,所以在模板定义的时候便使用了class。
在C++后期的版本中,为了不再和class向混淆,所以加入了新的关键字typename用以区分。对于我个人而言,在定义模板函数时,更倡导使用typename关键字。
这里,顺便记录一下模板函数和模板类的定义和使用。用户在程序编译前,只定义了模板函数
template <typename T, typename T2>
void func(T1 t1, T2 t2){}
以及模板类
template <typename T, typename T2>
class MyTemplateClass
{
。。。
};
以及在另外某处的调用:
func(5, "hello");
func("World", 5.60);
MyTemplateClass<int, String> *instance = newMyTemplateClass<int, String>();
MyTemplateClass<String, String> instance2();
那具体的函数或者类在什么时候生成呢?在编译的时候,编译完成之后,所有的具体函数以及具体类都生成了。
在编译时,编译器根据func()实参的类型,生成func(int, char*)以及func(char*, float)。模板类的生成也是同理,根据instance及instance2生成新的类,并编译。