这个用法有时候有必要吗?

时间:2012-12-19 23:12:34

标签: c++ templates

偶然发现了一些我无法解释的事情。以下代码无法编译

template<int a>
class sub{
protected:
    int _attr;
};

template<int b>
class super : public sub<b>{
public:
    void foo(){
        _attr = 3;
    }
};

int main(){
    super<4> obj;
    obj.foo();
}

而当我将_attr = 3;更改为this->attr = 3;时似乎没有问题。

为什么?你有必要使用它吗?

我使用g++ test.cpp -Wall -pedantic进行编译,我收到以下错误

test.cpp: in member function 'void super<b>::foo()':
test.cpp:11:3: error: '_attr' was not declared in this scope

1 个答案:

答案 0 :(得分:7)

Why is that? Are there any cases you must to use this?

是的,在某些情况下您需要使用this。在您的示例中,当编译器看到_attr时,它会尝试在类中查找_attr并找不到它。通过添加this-> 延迟查找,直到实例化时间允许编译器在sub内找到它。

使用此功能的另一个常见原因是解决模糊问题:

void foo (int i)
{
   this->i = i;
}