Привет Есть n-ое число классов, которые внутри общего класса. Т.е.: Код (Text): class cWASM { int a, b, c, d; cUSERS users; cADMINS admins; cCLERKCLONES clerk_clones; // ... etc }; Как сделать так, чтобы все эти подклассы видели переменные a,b,c,d и могли с ними работать? Передавать переменные через сеттеры в каждый подкласс не хотелось бы. Делать их глобальными для всего проекта тоже. Есть ли какое-то решение?
а проще? Код не мой. Подклассов достаточно много в нем. И в каждом дописывать метод и передавать this не очень красиво, ИМХО...
По-другому никак. нестед класс он только в пространстве имён другого класса, а бинарно никак с ним не связан, то есть это абсолютно разные типы. Достучатся по аналогии с наследованием тут невозможно.
в общем случае класс создается на куче... фактически как выделить структуру из данных класса и всяких в-тейблов с установленным выравниванием... то есть, в принципе, если вложенный класс знает указатель на себя (а он знает), то можно рассчитать расстояние от его указатель до указателя на искомые данные, зная структуру общего класса... то есть для класса cADMINS искомые данные будут лежать: Код (Text): int* pA = (int*)((char*)(this) - sizeof(cUSERS) - 4 * sizeof(int)) но это во-первых, может и не будет работать, а во-вторых, это - грязный хак, который лучше не использовать...
Rel Да ну, вы что Я пытаюсь уменьшить количества кода, чтобы читаемость была приемлимая и все было более-менее красиво Хардкорно дергать дворды с хипа не вариант Уже пишу дополнительные методы для передачи this. Всем огромное спасибо!
Если в проекте начинается такой бардак, нужно дерево классов трясти, а не подпорки ставить. Если надо "быстро и грязно", перепиши конструкторы вложенных классов, чтобы у них был строго один параметр - ссылка на экземпляр класса-владельца, а потом компили и начинай править синтаксические ошибки.