注册 登录
编程论坛 C++教室

c++ 类函数求教

aiyulunhui 发布于 2015-09-09 19:14, 714 次点击
template <typename captype, typename tcaptype, typename flowtype>
inline typename Graph<captype,tcaptype,flowtype>::termtype Graph<captype,tcaptype,flowtype>::what_segment(node_id i, termtype default_segm){}
这个函数怎么有两个::, 其中Graph是一个类, termtype是自定义的一个结构体
4 回复
#2
rjsp2015-09-09 19:47
不知道你在奇怪什么?
#3
aiyulunhui2015-09-10 14:03
回复 2楼 rjsp
inline 后面的typename作用是什么?
#4
rjsp2015-09-10 15:27
以下是引用aiyulunhui在2015-9-10 14:03:04的发言:

inline 后面的typename作用是什么?
typename Graph<captype,tcaptype,flowtype>::termtype
typename 用来标明 termtype 是一个类型,而非成员

因为 Graph<captype,tcaptype,flowtype>::termtype 中的 termtype 是个成员呢,还是个类型,取决于 captype,tcaptype,flowtype 这三个模板参数
也就是说,在模板实例化前,编译器是无法知道它是什么

编译器优先将其看成“成员”而非“类型”,因为若是“类型”,则为定义变量,代价比前者大。
VC++ 使用了一个取巧的做法(后来发现这个取巧的做法存在无解的bug),即使不加 typename 也能编译通过,但你要知道这样做是不符合标准的。
#5
aiyulunhui2015-09-10 15:38
回复 4楼 rjsp
谢谢版主,基本懂了,‘typename标明是类型不是成员’有什么参考文献吗?我在网上和书上都没看到过这种解释
1