Извините за плохо определенный заголовок. Что я имею в виду:Как эффективно получить доступ к родительскому объекту родительского объекта?
(Btw Я работаю на движке игры, а А это Scene, B являются игровые объекты и C являются компоненты)
У меня есть 3-х классов : а, в, с
- а содержит в и в содержит C.
- а и в имеет ссылку на друг друга.
- B и C имеют ссылку друг на друга.
(А вперед declarated в заголовке B, и включены в реализации Б)
Это как это: A < -> B < -> C
Моя ситуация такова:
Я хочу использовать метод A из C. (Как сообщать основному контейнеру, чтобы добавить другой B и т. Д.)
~ Я хочу сделать функцию многократного использования, которая вызывает метод родителя родительского объекта.
Например, в производных классах C мне не нужно заботиться о том, как C достигает A, я просто называю метод C-Re-A-and-do-something.
Мой вопрос заключается в то, что один я должен использовать и почему (или есть лучше один?):
В C: GetB() Гета() DoSomething (..)
C DoSomething() вызывает DoSomething() B, который вызывает DoSomething A.
Первый выглядит лучше для меня, но в реализации языка C я включаю только заголовок Б, где А является только вперед declarated. Так я не могу использовать методы в без явного включения его в C. (Это плохая практика, или я должен просто включить его?)
Второй имеет большие накладные. Если я хочу использовать X-метод A, мне нужно создать XY-метод в B, который вызывает XY X, и мне нужно создать XY-метод в C, который вызывает XY X.
Так что я не знаю, как мне достичь более высоких элементов в иерархии из нижних элементов.
Какое оптимальное решение для этого?
Добавляет ли заголовочный файл для файла A в файл C конфликты? –
'GetB(). GetA(). DoSomething()' кажется лучше. Вы можете включить A на C, просто убедитесь, что ваши определения и декларации разделены и включены. Другим вариантом может быть использование 'std :: functional', а затем инициализация B с помощью функции из A и ее копирование в переменную' std :: functional' в C, чтобы C затем мог просто вызвать 'my_std_functional()', что делает что-то в A. – wally
Это прекрасно работает. Не могли бы вы дать мне более подробную информацию о «определениях и декларациях разделены и включены»? Если каждый класс находится в другом пространстве, то это не проблема, не так ли? – Tudvari