1.定义或者是使用模板类:
template <typename T>
T minimum(const T& lhs, const T& rhs)
{
return lhs < rhs ? lhs : rhs;
}
int a = get_a();
int b = get_b();
int i = minimum<int>(a, b);
int i = minimum(a, b);
//让编译器自己去推导出对应的类型
你也可以指定为任意多个参数的模板函数来实现:任何内置的参数类型都是可以作为实际的函数的传入的,主要是看具体函数传入的类型中是否存在一些没有实现的运算符号!
template<typename... Arguments> class vtclass;
vtclass< > vtinstance1;
vtclass<int> vtinstance2;
vtclass<float, bool> vtinstance3;
//还可以是省略的方式给出多个参数
template<typename... Arguments> class vtclass;
vtclass< > vtinstance1;
vtclass<int> vtinstance2;
vtclass<float, bool> vtinstance3;
模板可以作为模板参数:
template<typename T, template<typename U, int I> class Arr>
class MyClass2
{
T t; //OK
Arr<T, 10> a;
U u; //Error. U not in scope
};
//因为在其中使用模板参数中的参数名字的时候是错误的,所以对应的可以直接使用为省略参数的形式。
template<typename T, template<typename, int> class Arr>
class MyClass2
{
T t; //OK
Arr<T, 10> a;
};
模板特殊化:意思是指定其中的某个元素为具体的特例化的属性。
类模板的成员函数:
// member_function_templates1.cpp
template<class T, int i> class MyStack
{
T* pStack;
T StackBuffer[i];
static const int cItems = i * sizeof(T);
public:
MyStack( void );
void push( const T item );
T& pop( void );
};
template< class T, int i > MyStack< T, i >::MyStack( void )
{
};
template< class T, int i > void MyStack< T, i >::push( const T item )
{
};
//外界传入参数的时候应该是对应的语法要求记住!
template< class T, int i > T& MyStack< T, i >::pop( void )
{
};
int main()
{
}