在C+中的模板化基类中查找名称+; 我正在阅读有效的C++第三版,第43条“知道如何访问模板化基类中的名字”。
编译器默认不在模板化基类中查找名称。 但为什么我告诉他们他们还是不做 但为什么我告诉他们他们还是不做 因为没有使用成员函数在C+中的模板化基类中查找名称+; 我正在阅读有效的C++第三版,第43条“知道如何访问模板化基类中的名字”。,c++,class,templates,base-class,name-lookup,C++,Class,Templates,Base Class,Name Lookup,编译器默认不在模板化基类中查找名称。 但为什么我告诉他们他们还是不做 但为什么我告诉他们他们还是不做 因为没有使用成员函数Foo,所以根本没有使用 这适用于类模板的成员:除非该成员在程序中使用,否则它不会实例化,也不需要定义 如果调用了Foo,您可能会得到一个 D<int> d; d.Foo(); D; d、 Foo(); 顺便说一句 但它没有抱怨i在B中是私有的 因为可访问性检查是在名称查找之后执行的。未找到名称i,则无法检查任何内容的可访问性 template<type
Foo
,所以根本没有使用
这适用于类模板的成员:除非该成员在程序中使用,否则它不会实例化,也不需要定义
如果调用了Foo
,您可能会得到一个
D<int> d;
d.Foo();
D;
d、 Foo();
顺便说一句
但它没有抱怨i
在B
中是私有的
因为可访问性检查是在名称查找之后执行的。未找到名称i
,则无法检查任何内容的可访问性
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;
}
D<int> d;
d.Foo();