1 函数模板的声明
template<typename T>
T fuc(T x, int y)
{
T x;
//……
}
如果主调函数中有以下语句:
double d; int a;
fuc(d,a);
则系统将用实参d的数据类型double去代替函数模板中的T生成函数:
double fuc(double x,int y)
{
double x;
//……
}
关键字typename也可以使用关键字class,这时数据类型参数标识符就可以使用所有的C++数据类型。
template<class MatrixT>
void init_les( MatrixT& _A, std::vector< double >& _b)
{
_A(0,0) = 25 ; _A(0,1) = 0 ; _A(0,2) = -15; _A(0,3) = 0 ;
_A(1,0) = 0 ; _A(1,1) = 20; _A(1,2) = -8 ; _A(1,3) = -4;
_A(2,0) = -15 ; _A(2,1) = -8; _A(2,2) = 17 ; _A(2,3) = 0 ;
_A(3,0) = 0 ; _A(3,1) = -4; _A(3,2) = 0 ; _A(3,3) = 4 ;
_b[0] = 0; _b[1] = 4; _b[2] = -2; _b[3] = 0;
}
2 例如如果我们想让函数模板minus()的表达式Parm::name 是个类型名因而使整个表达式是一个指针声明我们应如下修改
template <class Parm, class U>
Parm minus( Parm* array, U value )
{
typename Parm::name * p; // ok: 指针声明 注意 typename
}
3 如同非模板函数一样函数模板也可以被声明为inline 或extern 应该把指示符放
在模板参数表后面而不是在关键字template 前面
// ok: 关键字跟在模板参数表之后
template <typename Type>
inline
Type min( Type, Type );