偶正在学习“泛型编程”,有一些问题不是很明白!请高手指教

LinuxPanther 2003-10-23 09:40:32
根据“泛型编程”的一些技术,写了下面的程序。但是,有一些错误我无法改正。
请高手指教

//
#include <iostream>
using namespace std;

template <class T>
class Titerator_traits
{
public:
typedef T value_type;
};

template <class T>
class Titerator_traits<T*>
{
public:
typedef T value_type;
};

template <class InputIt>
typename Titerator_traits<InputIt>::value_type
sum_nonempty(InputIt first,InputIt last)
{
typename Titerator_traits<InputIt>::value_type result=*first++;
for(;first!=last;++first)
result+=*first;
return result;
}
void main()
{
int a[10];
for(int i=0;i<10;i++)
a[i]=i;
cout<<sum_nonempty(a,a+10)<<endl;
}
...全文
59 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yssss1980 2003-10-24
  • 打赏
  • 举报
回复
用DEV C++编译没问题的
ttlb 2003-10-24
  • 打赏
  • 举报
回复
up
Areece 2003-10-24
  • 打赏
  • 举报
回复
不象plainsong(短歌)说的那样typedef typename T::value_type value_type;
也是可以的,程序没有任何问题,只是由于VC不运行偏特化,所以不能通过,如果用GCC,应该是可以通过的。
另外就如plainsong(短歌)所说的,这样的程序可能并不是作者想要的。
Wolf0403 2003-10-24
  • 打赏
  • 举报
回复
有什么错误,什么编译器,什么系统不说出来,让人怎么弄?
sloriver 2003-10-24
  • 打赏
  • 举报
回复
没问题
短歌如风 2003-10-23
  • 打赏
  • 举报
回复
没什么问题啊……
不过我不知道你的非特化版本的Titerator_traits是用于什么情况的,好象只能用于定义了
++(postfix)、!=、*(postfix)和参数与*操作符的返回值类型兼容的+=操作符的类型……
如果你的非特化版本的Titerator_traits是用于STL中的iterator类的,应该这样定义:

template <class T>
class Titerator_traits
{
public:
typedef typename T::value_type value_type;
};
此外,由于用到了偏特化,这段代码不能在VC6中编译。

LinuxPanther 2003-10-23
  • 打赏
  • 举报
回复
没有人来救救我吗?????

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧