[英]Finding names in templatized base classes in C++
我正在閱讀有效的C ++ 3rd Edition,項目43“知道如何訪問模板化基類中的名稱”。
template<typename T>
class B {
T i;
};
template<typename T>
class D: public B<T> {
public:
void Foo() {
T a = B<T>::i;
}
};
int main() {
D<int> d;
}
對於以上代碼,我知道是否在D::Foo()
i
之前未添加B<T>::
,編譯器會抱怨“未在此范圍內聲明i
”。 (但是它並沒有抱怨i
在B
是私人的。)
但是,如果T i;
沒有在B中聲明,如下所示,編譯進行順利。
template<typename T>
class B {
};
template<typename T>
class D: public B<T> {
public:
void Foo() {
T a = B<T>::i;
}
};
int main() {
D<int> d;
}
默認情況下,編譯器不在模板化的基類中找到名稱。 但是,為什么我甚至告訴他們,他們仍然不這樣做?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.