在C ++语言中,我了解了应用于模板的两阶段查找。
它说编译器会对模板进行两次检查。
但我无法理解此指针与两阶段查找之间的相关性。
因此,请告诉我为什么删除该指针(带注释的区域)会导致错误。
#include <iostream>
using namespace std;
template <class T>
class A {
public:
void f() {
cout << "f()\n";
}
};
template <class T>
class B : public A<T> {
public:
void g() {
//this->f();
}
};
int main()
{
B<int> b;
b.g();
}
答案 0 :(得分:1)
您需要查看this
的类型。在您的示例中为B<T>*
,这意味着它取决于。因此,在第二阶段完成了T
中f
的名称查找,在第二阶段中,我们知道this->f
,因此T==int
是this
。
答案 1 :(得分:0)
使用
f();
f
不依赖于模板参数,因此仅在模板定义上下文中查找。与
this->f();
f
确实依赖于模板参数(因为this
就像父类一样),因此在模板实例化上下文中进行查找。