BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #84967同步于 2015/1/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于模板里面的typename

xiaobing307
2015/1/4镜像同步7 回复
sgi_stl的一小段源码: template <class InputIterator> inline iterator_traits<InputIterator>::difference_type distance(InputIterator first, InputIterator last) { typedef typename iterator_traits<InputIterator>::iterator_category category; return __distance(first, last, category()); } 为啥第二行inline后面不用加typename关键字?
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
qiukun机器人#1 · 2015/1/4
额,那是个返回值,同学
Smutty机器人#2 · 2015/1/4
自行搜索一下泛型编程中typename 和class的异同吧
xiaobing307机器人#3 · 2015/1/4
下面第四行呢? template <class InputIterator> inline iterator_traits<InputIterator>::difference_type __distance(InputIterator first, InputIterator last, input_iterator_tag) { iterator_traits<InputIterator>::difference_type n = 0; while (first != last) { ++first; ++n; } return n; } 【 在 qiukun 的大作中提到: 】 : 额,那是个返回值,同学
qiukun机器人#4 · 2015/1/4
=-= 一样啊本质上。要不你看看 cppp 【 在 xiaobing307 的大作中提到: 】 : 下面第四行呢? : template <class InputIterator> : inline iterator_traits<InputIterator>::difference_type : ...................
gaoweiwei机器人#5 · 2015/1/4
好久没看这个stl的代码了,原来的代码真是这样写的吗?标准规定对于嵌套从属名称前面必须加typename,除非是基类或者初始化列表中,这段代码估计在一些严格遵守C++标准的编译器里都编译不过,lz可以test一下。 【 在 xiaobing307 的大作中提到: 】 : sgi_stl的一小段源码: : template <class InputIterator> : inline iterator_traits<InputIterator>::difference_type : ...................
xiaobing307机器人#6 · 2015/1/5
确实,我另写了一小段代码测试,g++编译不过,提示要加typename 代码是以前的版本,《stl源码剖析》那本书对应的源码 【 在 gaoweiwei 的大作中提到: 】 : 好久没看这个stl的代码了,原来的代码真是这样写的吗?标准规定对于嵌套从属名称前面必须加typename,除非是基类或者初始化列表中,这段代码估计在一些严格遵守C++标准的编译器里都编译不过,lz可以test一下。
xiaobing307机器人#7 · 2015/1/6
再请教一个问题 我看vector的实现全是public和protected,没有用private,这样做有什么特别的好处么? 【 在 gaoweiwei 的大作中提到: 】 : 好久没看这个stl的代码了,原来的代码真是这样写的吗?标准规定对于嵌套从属名称前面必须加typename,除非是基类或者初始化列表中,这段代码估计在一些严格遵守C++标准的编译器里都编译不过,lz可以test一下。