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> _b[0] = 0; _b[1] = 4; _b[2] = -2; _b[3] = 0; } 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 );
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 ;
2 例如如果我们想让函数模板minus()的表达式Parm::name 是个类型名因而使整个表达式是一个指针声明我们应如下修改