Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96585
  • 博文数量: 46
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 505
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-22 19:56
文章分类
文章存档

2008年(46)

我的朋友

分类: C/C++

2008-04-25 13:41:45

最经要常常看看C++了,呵呵。
函数模板属于泛性编程的一部分,形式如下:
 template //可以用typename也可以用class,但是用typename 更能表达这里的
                            意思,至于为啥需要typename,可查看stroustrup的 <
                            evolution 0f C++>>,在<>里面参数名不能相同,
   type max(type param1,type param2) 
   { type temp=param1;
     temp=(param1>param2)? ,param2;
     return temp;
   }
函数模板的形式大概如此。
通过主调函数里的函数实参来决定模板实参的类型和值的过程叫做模板实参推演(template argument deduction)。
如下面的例子会产生编译错误:
template
   type min(type(&r_array)[size]) // 这样可以得到实参数组的长度。
   
typedef int (&p)[10];       // 定义2个数组变量
typedef double (&q)[20];
 
void func(int(*)(p)){};     // 定义重载函数
void func(double(*)(q)){};
 
int main()
{func(&min);  //产生编译错误,因为编译器不知道匹配哪个函数。
 func(static_cast(&min)); // 可以通过强制类型转换通过编译
}
模板实参推演只考虑实参类型的匹配,不考虑函数的返回类型的匹配。
 template
   type min(type(&r_array)(size))
  {}
 main()
{ int pval[9];
  int jval=min(pval); // 编译错误,实参类型不匹配
}
 
今后要努力做项目了,估计没时间更新blog了。
阅读(660) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~