在内部类中使用私有变量
use private variable in inner class
我有一个容器类,里面有一个指针类。容器类有一个私有变量(myTreeSize(,指针类也需要它。我尝试使用参考或朋友,但它不起作用。也许有人有想法?
template <typename Key>
class myContainer{
class myPointer;
using littlePoint = myPointer;
private:
struct node{
//....
};
struct mylist{
//....
};
mylist* tree{nullptr};
size_type myTreeSize{0};
public:
littlePoint find(int key) {
mylist *list_pos{find_list(key)}; //return list-position
node *node_pos {find_node(key)}; //return node-position
if (list_pos && node_pos) return littlePoint{list_pos, node_pos};
return end();
}
//.....methods
};
template <typename Key>
class myContainer<Key>::myPointer{
mylist *list_pos;
node *node_pos;
myContainer& parent; //<--- no private variables
friend class myContainer; //<-- no effect
explicit myPointer(mylist *list_pos=nullptr, node *node_pos = nullptr):
list_pos{list_pos}, node_pos{node_pos} {
//...
}
}
必须初始化myContainer& parent
。引用不能保持未初始化状态。如果我修复了这个问题,那么您的代码就会编译,并且不需要friend
声明,因为内部类已经可以完全访问外部类。
#include <iostream>
#include <string>
using namespace std;
template <typename Key>
class myContainer {
class myPointer;
private:
struct node {
//....
};
struct mylist {
//....
};
mylist* tree{ nullptr };
int myTreeSize{ 0 };
public:
};
template <typename Key>
class myContainer<Key>::myPointer {
mylist *list_pos;
node *node_pos;
myContainer& parent;
explicit myPointer(myContainer& parent, mylist *list_pos = nullptr, node *node_pos = nullptr) :
parent(parent), list_pos{ list_pos }, node_pos{ node_pos } {
parent.myTreeSize; // no problem!
}
};
int main()
{
myContainer<int> c;
}
演示
外部类中没有显示myPointer
。 声明嵌套类不会自动创建该类的任何实例。同样,"内部"类也没有"外部"实例。
一个简单的例子,它实际实例化内部类并将对父类的引用传递给它:
template <typename T>
class A
{
class B;
B b_;
public:
A() : b_(*this) {}
};
template <typename T>
class A<T>::B
{
A & a_;
public:
B(A & a) : a_(a) {}
};
相关文章:
- 在设计 SDK 时,我是否应该在 C++ 头文件中完全隐藏内部类?
- 如何声明由多个线程调用的 C++ DLL 的内部类,而无需导出类
- 从内部类继承
- 如何将枚举类转发声明为模板化类的内部类?
- 从内部类中的方法从包含类调用方法
- 从模板化父类中的派生内部类访问受保护的成员变量
- C++模板类的内部类访问
- 使用类模板的内部类模板专用化模板
- 如何使用包含内部类的类实例有效地从内部类访问成员?
- C++ 如何在外部类中声明的内部类中使用变量
- 在C++中将内部类实现为具有名称空间的独立类有什么好处
- 参数化类的别名(或类型定义)内部类
- 从内部类的析构函数调用虚拟函数
- 如何在没有setter的情况下设置类内部类的成员变量?
- 具有相同名称的方法和内部类(错误:.. 与前面的声明冲突)
- 内部类私有成员访问和封闭的友好性
- 在C++中从内部类对象获取外部类对象
- 在它所属的模板类中使用内部类
- 如何编辑变量内的半字节?
- 全局变量和内部类有什么区别?