ПРОБЛЕМА:
Я хочу настроить систему элементов, сохраняя при этом пар этих элементов, которые я хочу Доступ и изменить легко (добавить больше) .
В то же время я хочу свести сложность к минимуму и не реализовывать все в одном классе.
Я решил сохранить индексы для париспользуя структуру, которая может справиться с большой сложностью вычислений среди 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 из класса B_pair.
НЕУДАЧНОЕ РЕШЕНИЕ 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
.
FAILED SOLUTION 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
объекта.
Обратите внимание, что ЭТО ВОЗМОЖНО В JAVA !!
PS В данный момент я использую шаблон проектирования Singleton и сохранил статический указатель.Не большой поклонник этого решения.