从模板化父类中的派生内部类访问受保护的成员变量
Access to protected member variable from derived inner class in a templated parent class
我在尝试编译它时收到此错误:
template <typename T>
struct Temp
{
struct BaseIterator
{
protected:
int pos;
BaseIterator() : pos(0) {}
};
struct LeafIterator : public BaseIterator
{
int * operator * () { return &pos; }
LeafIterator() : BaseIterator() {}
};
};
返回:
prog.cpp: In member function ‘int * Temp<T>::LeafIterator::operator*() const’:
prog.cpp:24:52: error: ‘pos’ was not declared in this scope
int * operator * () { return &pos; }
没有父Temp
结构的相同代码工作正常,当Temp
结构不是模板时,代码也可以正常工作。同样,即使基的成员是public
,我仍然得到编译器的错误。
我知道我可以通过this->pos
引用继承的成员,但是在代码中的任何地方添加this->
真的很痛苦。
如何访问基本成员,而不必通过this->
为所有成员添加前缀?
编辑:BaseIterator
只是为许多不同的(但工作相似(的迭代器保存公共成员。我可以复制所有迭代器中的所有成员并完成它,但我想重用一个通用/通用接口。
您可以使用using
声明。
template <typename T>
struct Temp
{
struct BaseIterator
{
protected:
int pos;
BaseIterator() : pos(0) {}
};
struct LeafIterator : public BaseIterator
{
using BaseIterator::pos;
int * operator * () { return &pos; }
LeafIterator() : BaseIterator() {}
};
};
int main()
{
Temp<int>::LeafIterator leaf_iterator;
}
这在 GCC 8.2.0 中编译得很好。
如何访问基本成员而不必通过
this->
为所有成员添加前缀?
您可以创建private
访问器:
class LeafIterator : public BaseIterator
{
private:
int& pos() { return this->pos; }
public:
int * operator * () { return &pos(); }
LeafIterator() : BaseIterator() {}
};
相关文章:
- 从模板化父类中的派生内部类访问受保护的成员变量
- C++模板类的内部类访问
- 如何使用包含内部类的类实例有效地从内部类访问成员?
- 内部类私有成员访问和封闭的友好性
- 从内部类访问外部公共成员
- 从内部类访问外部类,而无需明确传递实例
- 嵌套类的类内好友是否可以访问外部类成员?
- clang或gcc关于这个内部类成员访问是否正确
- C++ 内部类无法访问外部类的成员
- 类内类访问外部类的数据成员
- C++:如何访问内部类的方法
- 如何从其他类访问数据私有内部类
- 派生类是否可以访问作为内部类的好友的父类的受保护内部类的私有方法
- C++ 外部类访问 内部类为什么被禁止
- 无法访问 C++ 中的内部类
- 通过外部类的实例访问嵌套的内部类
- 内部类访问外部类嵌套枚举
- 当内部类是class vs struct时,不可访问的基类
- 从外部类访问嵌套的内部类结构
- 无法使用外部类对象访问内部类成员