例如,考虑以下存在 name 冲突的情况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