| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1129 人关注过本帖
标题:关于一个较复杂的类模板的演绎问题
只看楼主 加入收藏
lsrwan
Rank: 2
等 级:论坛游民
帖 子:31
专家分:17
注 册:2009-10-11
收藏
得分:0 
现在已经明白了,这里确实是只有声明,没有定义,迷失的木桶讲的是对的,这似乎是作者的一个通用做法,对于简单的例子,只给出声明.
void fppm(void (X<N>::*p)(typename X<N>::I)){}; //这里加括号能编译通过               
fppm(&X<33>::f);  // fine: N deduced to be 33
至于这两句,我是这样理解typename X<N>::I实际是演绎 类X中函数f的形参int,例如声明函数指针作为形参,一般这样
double fun(float (*pfun)(double))实际上 X<N>::*p和*pfun是对应的,(typename X<N>::I)和)(double)是对应的.
(&X<33>::f就是一个函数指针,至于说函数指针不能取地址,我没看到那里有这个限制.
演绎过程如下:
由于33是int型,因此&X<33>::f被演绎为  &X<int>::f(int X<int>::int)  因此是可以别正确演绎的,而
fppm(&X<33.5>::f); 是不能被演绎的.

[ 本帖最后由 lsrwan 于 2010-5-30 20:40 编辑 ]
2010-05-30 20:29
迷失的木桶
Rank: 4
等 级:业余侠客
帖 子:52
专家分:230
注 册:2010-5-29
收藏
得分:0 
很好,很有总结性。楼主继续努力
2010-05-31 07:49
快速回复:关于一个较复杂的类模板的演绎问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039242 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved