Каков наилучший способ включить несколько подклассов в файл в C ++? - PullRequest
0 голосов
/ 15 февраля 2019

Я уверен, что такие вопросы задавались, но я просто не мог их найти.Возможно, я использовал неправильные слова, и если это так, то точка в правильном направлении была бы потрясающей, и я просто удалю этот вопрос.

В любом случае, я делаю свой первый «больший» проект, и теперь у меня естьмножество файлов, которые должны быть включены в другие файлы для работы проекта.Проблема заключается в том, что включение всех этих файлов выглядит очень грязно и может привести к ненужным ошибкам include /.Например, что я имею в виду:

Скажем, у меня есть класс Spell в файле Spell.h & Spell.cpp, который содержит общую информацию для всех заклинаний (мана-стоимость, время каста, т. Д.), А затемкуча различных специфических заклинаний, которые наследуются от класса Spell, все в своих отдельных файлах.Мне нужно включить эти заклинания в класс «Враг» и «Персонаж», чтобы у них был список используемых заклинаний, но это означало бы, что мне нужно индивидуально включать каждое конкретное заклинание, которое мне нужно.Это звучит скучно и грубо.

Мне интересно, есть ли способ, которым я могу просто назвать что-то вроде «#include« AllSpells.h »» или «#include« CharacterSpells.h »», которое затем будет включатьвсе файлы, которые я хочу включить.

Я знаю, что мог бы создать пустой класс, который включает в себя необходимые специфические заклинания, и просто вместо этого включить этот класс (например, иметь класс с именем AllSpells, который включает каждое конкретное заклинание), но это также звучит плохо.

Кажется, что это довольно распространенная вещь, и поэтому вполне разумно, что есть «лучший» или список «лучших» способов сделать такую ​​вещь.Большое спасибо за любые советы здесь.

1 Ответ

0 голосов
/ 15 февраля 2019

Я предлагаю следующие рекомендации по кодированию, которые, надеюсь, помогут вам решить, следует ли #include .h файл в .cpp файле.

  1. Я нахожу Open-Закрытый принцип один из самых ценных принципов.Если вам нужно изменить существующие файлы для поддержки нового типа Spell, вы нарушаете этот принцип.

  2. Если вы можете избежать использования предварительного заявления, используйте его,Не включайте .h файл.См. Когда я могу использовать предварительную декларацию? для получения дополнительной информации по этому вопросу.

Относительно

Мне нужно включить эти заклинанияв классе Enemy и Character, чтобы у них был список используемых заклинаний, но для этого мне нужно было бы индивидуально включать каждое конкретное заклинание, которое мне нужно.Это звучит скучно и грубо.

Это не грубо, это необходимо и уместно.Это может быть утомительно, но это может быть решено, если по-новому взглянуть на ваш код и выяснить, можете ли вы обойтись без необходимости явно ссылаться на подтипы Spell.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...