-类型成为参数
-function template
Perform similar operations on different types of data.
eg: swap function template
template <classT>
void swap( T&x , T&y ){
T temp=x;
x=y;
y=temp;
}
-syntax:
Only exact match on types is used.
parameter types represent: -types of arguments to the function
-return type of the function
-declare variables within the function
-template: declaration
-function instantiation
-The compiler deduces the template type from the actual arguments passed into the function.
-Can be explicit:
eg: the parameter is not in the function signature (older compiler won't allow this)
#include <iostream>
template <class T>
void foo(void){
T a;
}
int main(){
foo<int>();
foo<float>();
return 0;
}
-templates can use multiple types
template< class A, class B>
-one more example:
#include <iostream>
template <class T>
void bubble_sort(vector<T> &a){
const size_t last=a.size()-1;//size_t的全称应该是size type,就是说“一种用来记录大小的数据类型”。
//因为size_t类型的数据其实是保存了一个整数,所以它也可以做加减乘除,
//也可以转化为int并赋值给int类型的变量。
for(int i=0;i<last-1;i++){
for(int j=i+1;j<last;j++){
if(a[j]<a[j-1]){ //the '<' has to be overloaded if T is a self-defined class
swap(a[j],a[j-1]);//which swap?
}
}
}
}
int main(){
return 0;
}
-templates and inheritance
-templates can inherit from non-template classes
template <class A>
class Derived : public Base { ... }
-templates can inherit from template classes
template <class A>
class Derived : public List<A> { ... }