关于两阶段查找和该指针

时间:2019-12-13 12:56:01

标签: c++ templates

在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();
}

2 个答案:

答案 0 :(得分:1)

您需要查看this类型。在您的示例中为B<T>*,这意味着它取决于。因此,在第二阶段完成了Tf的名称查找,在第二阶段中,我们知道this->f,因此T==intthis

答案 1 :(得分:0)

使用

f();

f不依赖于模板参数,因此仅在模板定义上下文中查找。与

this->f();

f确实依赖于模板参数(因为this就像父类一样),因此在模板实例化上下文中进行查找。