在不存储指针的情况下访问外部成员

时间:2018-06-08 01:59:01

标签: c++ oop

问题:

我想建立一个元素系统,同时保留这些我希望访问修改的元素>轻松(添加更多)

与此同时,我希望将复杂性降至最低,而不是在一个类中实现所有内容。

我决定使用结构将索引存储到对中,这可以处理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设计模式,并保留了静态指针。不是这个解决方案的忠实粉丝。

0 个答案:

没有答案