2
例如,请考虑以下那里是名nest1
的冲突:我们是否需要将嵌套类型的成员参数加上“::”?
template <typename U> class nest1 {};
class cls {
public:
template <typename V> class nest1 {};
template <typename W> class nest2 {
public:
void bar(nest1<W> x);
};
};
template <typename W>
void cls::nest2<W>::bar(nest1<W> x) {} // how does compiler know which nest<1>?
- 编译器如何知道是否
bar
需要nest1<W>
或cls::nest1<W>
如果我们不使用前缀cls::
(如bar(cls::nest1<W> x)
) ? - 无论如何明确加前缀
cls::
是否是一种好的做法?
注:编译器实际选择隐含声明bar(cls::nest1<W> x)
:
- 调用
cls::nest1<W> x; bar(x);
作品:http://ideone.com/3ZuH2Z - 传递
nest1<W> x; bar(x);
失败:http://ideone.com/6HmA3f
同样,当你有一个全局变量,并与同名的静态数据成员的。 – chris 2013-05-11 01:59:20
因此,它只是剥离图层并在最接近的父/祖类中找到所需的声明? – mchen 2013-05-11 02:13:06
哦,我认为它会选择全球性的。你应该在你的问题中指定。 – chris 2013-05-11 02:17:21