我有一个我继承的模板类,并通过派生类访问基类成员。 我不能在不使用“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();
}
答案 0 :(得分:2)
由于基类依赖于模板参数,因此在非限定查找期间不会考虑基本成员。
使用this->
时,使用类成员查找,将检查基类成员,即使它是依赖类型。