为什么我不能在不使用此

时间:2015-12-03 12:34:33

标签: c++ templates inheritance

我有一个我继承的模板类,并通过派生类访问基类成员。 我不能在不使用“this”的情况下访问它们,我找到了原因。

如果我理解正确,当我使用模板时,模板化代码的副本将通过专门化进行,然后才会编译。这意味着如果我写vector<int>,编译器会复制vector并将所有“T”替换为“int”。

如果是这种情况,我不明白为什么模板和非模板化代码之间应该有任何区别。

template <typename T>
class b
{
protected:
 int myMember;
};

template<typename T>
class e : public b<T>
{
public:
 void dosomething()
 {
  this->myMember = 2; // Everything is perfect
  myMember = 2; // Doesn't compile in GCC, can't find the member
 }
};

int main()
{
 e<int> mye;
 mye.dosomething();
}

1 个答案:

答案 0 :(得分:2)

由于基类依赖于模板参数,因此在非限定查找期间不会考虑基本成员。

使用this->时,使用类成员查找,检查基类成员,即使它是依赖类型。