为什么我不使用它就无法访问成员
Why can't I access members without using this
我有一个从中继承的模板化类,并通过派生类访问基类成员。如果不使用"this",我就无法访问它们,我找到了下降的原因。
如果我理解正确的话,当我使用模板时,模板化代码的副本是用专门化的方法生成的,然后它才会编译。这意味着如果我写vector<int>
,编译器会复制向量,并用"int"替换所有的"T"。
如果是这样的话,我不明白为什么模板和非模板代码之间应该有任何区别。
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();
}
因为基类依赖于模板参数,所以在非限定查找过程中不考虑基成员。
当您使用this->
时,您将使用类成员查找,将检查基类成员,即使它是依赖类型。
相关文章:
- C++ 传递指向对象的指针的指针,无法访问成员
- 从不同C++类的成员变量访问成员函数
- 使用 getter 访问成员变量C++
- 如何使用包含内部类的类实例有效地从内部类访问成员?
- 通过多个类访问成员时出错
- 如何在使用对象指针时访问成员函数
- 为什么相应成员不能正确访问成员函数指针
- 从两个不同类继承的非虚拟基类的访问成员
- 如何使用 gcc 内联汇编器代码访问成员变量
- 如何使用常数向量访问成员函数
- 访问成员函数中参数的类成员
- C++嵌套结构初始化和访问成员
- 通过指向班级第一个成员的指针访问成员是不确定的行为吗?
- 如何使用C STD :: SET中的迭代器访问成员功能
- 访问成员C 时,结构的向量生成了范围的错误
- 带指针的班级访问成员
- 从聚合类访问成员变量
- 如何访问成员变量 sqlite 回调
- ctypes/C++segfault访问成员变量
- 通过父类型的指针或直接从派生类访问成员函数的差异