关于函数模板的问题

rock_HX 2008-11-08 10:46:32
编译器为函数实例化依赖于形参的类型,但是下面这样的情况怎么办?

template<typename T>
void fun(std::list<T>& aList, std::list<T>::iterator& it);

这样的话编译都通不过..
...全文
97 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhyttppd 2008-11-08
  • 打赏
  • 举报
回复
http://blog.csdn.net/purewinter/archive/2007/08/29/1764338.aspx
我搜到了篇C++template笔记,你可以看看。
rock_HX 2008-11-08
  • 打赏
  • 举报
回复
大概明白了,谢谢大家,结贴去
yshuise 2008-11-08
  • 打赏
  • 举报
回复
当有模板作为参数的时候,编译器,或是说编译器的语法分析器
不能正确识别出类型,所以必须用typename来指示这是一个类型。编译器才能正确识别。
fibbery 2008-11-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 rock_HX 的回复:]
引用 4 楼 lann64 的回复:
template <typename T>
void fun(std::list <T>& aList, typename std::list <T>::iterator& it);

这样解决了,能不能说说为什么像我那样写出错?``
[/Quote]

typename旨在消除二义性。
当list还没有实例化时,编译器并不知道iterator原来是list里面包含的一个类型,使用typename告诉编译器,这是一个类型,编译器才知道。
hooked 2008-11-08
  • 打赏
  • 举报
回复
不用typename的话,编译器把iterator解析为std::list<T>中的一个成员变量,而不是一个类型

[Quote=引用 6 楼 rock_HX 的回复:]
引用 4 楼 lann64 的回复:
template <typename T>
void fun(std::list <T>& aList, typename std::list <T>::iterator& it);

这样解决了,能不能说说为什么像我那样写出错?``
[/Quote]
hhyttppd 2008-11-08
  • 打赏
  • 举报
回复
使用依赖型类型名称(限定符::)必须使用typename,就这么规定的。
hhyttppd 2008-11-08
  • 打赏
  • 举报
回复
jf
rock_HX 2008-11-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lann64 的回复:]
template <typename T>
void fun(std::list <T>& aList, typename std::list <T>::iterator& it);
[/Quote]
这样解决了,能不能说说为什么像我那样写出错?``
rock_HX 2008-11-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yshuise 的回复:]
C/C++ codetypename std::list <T>& aList;
typename std::list <T>::iterator& it
[/Quote]
能不能说具体些?`
这样写好像不行...
lann64 2008-11-08
  • 打赏
  • 举报
回复
template <typename T>
void fun(std::list <T>& aList, typename std::list <T>::iterator& it);
yshuise 2008-11-08
  • 打赏
  • 举报
回复
typename std::list <T>& aList;
typename std::list <T>::iterator& it
rock_HX 2008-11-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vk2211 的回复:]
模板函数是不是要放在h文件里编译?
[/Quote]
这个不一定吧...
vk2211 2008-11-08
  • 打赏
  • 举报
回复
模板函数是不是要放在h文件里编译?

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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