兑现诺言, yjh1982(血精灵)进来拿分
感谢你帮我解决了问题,开这个给你100分,另外,又有问题要问,解决再给100,
#include <cstdlib>
#include <iostream>
using namespace std;
struct P_tag{};
struct R_tag{};
template<typename T>
struct aiterator_traits{
typedef typename T::value_type value_type;
typedef typename T::avalue_tag avalue_tag;
};
template<typename L>
struct aiterator_traits<L*>{
typedef L value_type;
typedef P_tag avalue_tag ;
};
template<>
struct aiterator_traits<int>{
typedef int value_type;
typedef R_tag avalue_tag ;
};
template<class L>
typename aiterator_traits<L>::value_type
func_p(L ite,P_tag){ return *ite;}
template<class L>
typename aiterator_traits<L>::value_type
func_p(L ite,R_tag){ return ite;}
template<class L>
typename aiterator_traits<L>::value_type
func(L ite){ return func_p(ite,aiterator_traits<L>::avalue_tag());}
int main(int argc, char *argv[])
{
int b = 11;
cout<<func(b)<<endl;//在这提示错误
cout<<"aaa"<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
上面的代码是想看看traits怎么用,结果编译不通过,错误是在aiterator_traits<L>::avalue_tag()解析不出类型,我觉得应该能解析出来是R_tag的阿,不管是谁解决了都给100,谢谢各位大侠,
问题点数:100、回复次数:12Top
1 楼zengwujun(月之海 为linux入门奋斗100天)回复于 2005-04-04 18:36:29 得分 0
template<typename L>
struct aiterator_traits<L*>{//L是一个未确定的类型,这里能用L进行特化吗?
typedef L value_type;
typedef P_tag avalue_tag ;
};Top
2 楼steedhorse(晨星)回复于 2005-04-04 18:57:36 得分 0
以后别再单独开帖给技术分,C/C++版不允许的,这次就算了,下不为例。Top
3 楼yangkun110(狼的传人)回复于 2005-04-04 19:02:03 得分 0
回复人: steedhorse(晨星) ( ) 信誉:119 2005-04-04 18:57:00 得分: 0
以后别再单独开帖给技术分,C/C++版不允许的,这次就算了,下不为例。
Top
4 楼FireEmissary(咒火使者)回复于 2005-04-04 19:27:21 得分 100
template<class L>
typename aiterator_traits<L>::value_type
func(L ite){ return func_p(ite,aiterator_traits<L>::avalue_tag());}
改为
template<class L>
typename aiterator_traits<L>::value_type
func(L ite){ return func_p(ite,typename aiterator_traits<L>::avalue_tag());}
分全给我吧.血精灵同志一定不会介意的:)
Top
5 楼qianyong325(帝王企鹅)回复于 2005-04-04 20:12:32 得分 0
to:fireEmissary(咒火使者)
谢谢,不过这贴说好了是给血精灵的,总不能言而无信,小弟港开始弄泛形编程,感觉原来真是好玩,以后还有很多问题要问的,另外,这个steedhorse(晨星) 说不让开贴给分,你回答的是正确地,怎么给你分啊?Top
6 楼qianyong325(帝王企鹅)回复于 2005-04-04 20:15:37 得分 0
to:zengwujun(月之海)
可以这样特化的,stl里有好多类似这样的东西Top
7 楼FireEmissary(咒火使者)回复于 2005-04-04 20:57:52 得分 0
既然我答对了,给分就是了-_-#Top
8 楼qianyong325(帝王企鹅)回复于 2005-04-04 23:12:48 得分 0
等明天早上血精灵不来就揭帖Top
9 楼lw1a2(一刀 现在改六点下班了:()回复于 2005-04-05 08:33:44 得分 0
没来~~Top
10 楼zengwujun(月之海 为linux入门奋斗100天)回复于 2005-04-05 08:38:52 得分 0
template<typename L>
struct aiterator_traits<L*>{
typedef L value_type;
typedef P_tag avalue_tag ;
};
这一段在vc下面通不过,而把这注释掉之后
func(L ite){ return func_p(ite,aiterator_traits<L>::avalue_tag());}
不加typename没有问题Top
11 楼qianyong325(帝王企鹅)回复于 2005-04-05 08:51:25 得分 0
to: zengwujun(月之海)
注释掉就没有意义了,我就是要看看模版的推演过程,vc6.0下面偏特化已经不支持了,我用的是dev C++写的代码,答案正如FireEmissary(咒火使者)说的,少了一个typename,主要是刚开始用dev c++,对这个编辑器不敏感,写东西老是丢三落四,谁能给推荐一款能和vc6.0 + va10+wintab匹敌的开发环境阿?最好能多支持一点标准,另外,如果9:30血精灵还不来分就都给FireEmissary(咒火使者)了,毕竟只有他回答对了问题Top
12 楼beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)回复于 2005-04-05 09:30:26 得分 0
呵呵。Top




