游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4956|回复: 10

vector<Key<float>> :VC2003如何支持这个

[复制链接]

10

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
发表于 2007-1-29 21:52:00 | 显示全部楼层 |阅读模式
请问VC2003下怎么支持下面这种模板嵌套? 就是两重尖括号:   << >>

2005下可以编过的。谢谢。

#include <vector>
using namespace std;
template <class T>
struct Key {       
        T data;
};
vector<Key<float>>;

编译错误信息:
error C2947: 应由“>”终止 模板参数列表,却找到“>>”


2005下却完全正确。

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2007-1-29 23:01:00 | 显示全部楼层

Re:vector<Key<float>> :VC2003如何支持这个定义?

vector&lt;Key&lt;float&gt;&gt;;应该改成
vector&lt;Key&lt;float&gt; &gt;;(注意那个空格)
这是C++标准所带来的问题,连续两个&gt;&gt;会被认为重载。
2005正确,只代表2005不符合标准的部分

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2007-1-29 23:27:00 | 显示全部楼层

Re:vector<Key<float>> :VC2003如何支持这个定义?

恩,有道理.

3

主题

67

帖子

111

积分

注册会员

Rank: 2

积分
111
发表于 2007-1-29 23:56:00 | 显示全部楼层

Re:vector<Key<float>> :VC2003如何支持这个定义?

用typedef将Key&lt;float&gt;定义成一个类型A,然后vector&lt;A&gt;也可以 ....

15

主题

83

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2007-1-30 00:16:00 | 显示全部楼层

Re: vector<Key<float>> :VC2003如何支持这个定义?

feicheng99: vector&lt;Key&lt;float&gt;&gt; :VC2003如何支持这个定义?

请问VC2003下怎么支持下面这种模板嵌套? 就是两重尖括号:   &lt;&lt; &gt;&gt;

2005下可以编过的。谢...

2005比2003聪明:)

13

主题

978

帖子

978

积分

高级会员

Rank: 4

积分
978
发表于 2007-1-30 00:22:00 | 显示全部楼层

Re:vector<Key<float>> :VC2003如何支持这个定义?

对于模板嵌套,一个标准的编译器得到这个结果是很自然的

More Effective C++提到过必须得写&lt; &lt; &gt; &gt;而不是&lt;&lt;&gt;&gt;

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2007-1-30 01:19:00 | 显示全部楼层

Re:vector<Key<float>> :VC2003如何支持这个定义?

加个空格吧,不费劲。

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2007-1-30 18:32:00 | 显示全部楼层

Re:vector<Key<float>> :VC2003如何支持这个定义?

compiler使用的是贪婪匹配,所以&gt;&gt;会被优先判定为流操作符,类似像++++将等同于++ ++

29

主题

405

帖子

405

积分

中级会员

Rank: 3Rank: 3

积分
405
发表于 2007-1-30 18:49:00 | 显示全部楼层

Re:vector<Key<float>> :VC2003如何支持这个定义?

2005难道是智能匹配?

0

主题

199

帖子

199

积分

注册会员

Rank: 2

积分
199
发表于 2007-1-30 21:26:00 | 显示全部楼层

Re:vector&lt;Key&lt;float&gt;&gt; :VC2003如何支持这

要做到能够判断&gt;&gt;是左移还是两个尖括号,其实并不是很困难。
但是因为一开始的时候就规定这个活有程序员而不是编译器来干了。
所以后来的编译器都把这认为是一个错误。
vc2005不认为这是错误并不是一件好事。这意味着有这样错误的代码在vc2005上面通过编译的代码在别的编译器上无法通过。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 09:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表