问题:
我想建立一个元素系统,同时保留对这些我希望访问和修改的元素>轻松(添加更多)。
与此同时,我希望将复杂性降至最低,而不是在一个类中实现所有内容。
我决定使用结构将索引存储到对中,这可以处理B中计算的大量复杂性。
class A {
class B_pair {
int idx_of_B[2];
public:
B get_B_value_1(); // how to access B's?
B get_B_value_2();
// a lot more member functions
};
public:
std::vector<B> B_values;
std::vector<B_pair> special_B_pairs;
// a lot more stuff
};
但是,我遇到的问题是我无法从B_pair类中访问B值。
未通过解决方案1
class A {
A() { B_pair::outer = this; }
class B_pair {
static A *outer;
void init_outer(A *o);
};
}
我使用了static
成员,因为我有很多B_pair
个对象,并且每个指针/引用的额外内存都很重要。
这很好用。但是,如果我同时拥有多个A对象,则会出现问题,因为outer
指针最终指向最后创建的A
对象。
失败的解决方案2
我采取的另一种方法是存储指针。
class A {
class B_pair {
B *items[2];
};
std::list<B> B_values; // I need random access iterators!!
};
然而,这意味着我需要使用比std::vector
更低效的数据结构,这会在扩展时使其迭代器失效。
问题
如何从内部class A
访问外部class B
的成员,或类似的内容使其成功?理想情况下,我想要与第一个解决方案类似的东西,但每个A *outer
对象都有一个A
个实例。
请注意THIS IS POSSIBLE IN JAVA !!
P.S。目前我正在使用Singleton设计模式,并保留了静态指针。不是这个解决方案的忠实粉丝。