首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于typename的有关问题

2012-04-08 
关于typename的问题根据C++标准,表示一个模板内部类时应使用typename关键字,可以下代码通过了VS2005的编译

关于typename的问题
根据C++标准,表示一个模板内部类时应使用typename关键字,可以下代码通过了VS2005的编译

//用来表示有个内部类的类
class   outer   {   public:     class   inner   {   };   };

//使用T的内部类
template   <class   T>
class   Z
{
public:
  void   f()
  {
    T::inner   nested_class;   //并没有加入typename,可是编译通过了
    typename   T::inner   nested_class2;
  }
};

int   main()   {}

是编译器太智能,在模板分析期间就能判断一个变量是否是内嵌类?
还是编译器根本就没有分析模板,直到有代入模板参数后去分析具体的类?

谢谢各位指教!

[解决办法]
通过和不通过都很正常。编译器可以有这么高的智能的,但不是所有编译器都有这么高的智能。
这个问题,没必要深究。
[解决办法]
vs2005在这一点上是走在前面了。下一班标准可能会放松typename上的限制。
[解决办法]
楼主就不要计较这个问题了,咱们写代码就是要利用编译通过的,
如果通过了,并且符合你的意图,那就可以了。
如果没通过,那么这个时候就要加入typename声明了。

因为编译器只是一个别人写的工具,人家这么理解标准所以就这么设计这个编译器了。

关键是自己理解这个地方就行了(比如这里typename的作用就是为了消除歧义)
[解决办法]
大部分都能编译过去,起码g++ 和CC没问题
T::inner* nested_class; //并没有加入typename,可是编译通过了
这样定义的话,怎么解释?
是inneer静态变量与vnested_class的乘积。
试试看。

热点排行