Распределение множества маленьких классов - PullRequest
3 голосов
/ 05 января 2011

У меня есть базовый класс с именем EventArgs.Из этого вытекает множество специализаций, которые представляют аргументы события для определенного типа события.Потребителям этих событий может понадобиться несколько, много или очень мало этих классов аргументов.

Мой вопрос: вы бы предоставили файл заголовка для каждого типа (например, 50+ заголовочных файловдля изменяющихся), попытаетесь ли вы сгруппировать их в семейства и получить «общий» заголовочный файл для них, или вы добавите предупреждение в окно и добавите их в один простой в использовании заголовочный файл, который может простобыть включенным?

Другой подход может состоять в том, чтобы иметь 50 заголовочных файлов, и тогда я мог бы представить некоторые "семейные" заголовочные файлы, которые включали в себя определенные.Не уверен насчет соглашений об именах для такого рода вещей, так что очевидно, что это где.

Я знаю, что может быть не жесткое и быстрое правило, но интересно, что сделали другие разработчики, когда обнаруживают, что пишут многомаленькие уроки.

Заранее спасибо.

Ответы [ 5 ]

3 голосов
/ 05 января 2011

Мне бы пришлось поместить два класса в отдельные заголовки в одном из следующих случаев:

  • они огромны
  • они не связаны или вряд ли будут использоваться вместе
  • каждая из них вводит свои собственные зависимости заголовка

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

Что касается «семейств», включая множество небольших файлов, то в некоторых системах сборки (и файловых системах) это может повлиять на время компиляции, и в любом случае я не вижу смысла в этом - обычно люди будут использовать Документация или IDE для поиска классов, не глядя на заголовки файлов. Так что вы могли бы сделать это только для упрощения включения, но тогда почему бы не поместить их в один заголовок.

1 голос
/ 05 января 2011

Я бы сгруппировал их по семьям в соответствии с классами, которые пользователи, вероятно, захотят использовать вместе.50+ крошечных заголовочных файлов кажутся чрезмерными в любом случае.

0 голосов
/ 05 января 2011

, если они принадлежат к одной иерархии наследования, поместите их в один и тот же файл .h. Это поможет вам выбрать правильный порядок занятий. Одна из менее известных проверок во время компиляции в c ++ основана на правильном порядке классов в файле .h.

0 голосов
/ 05 января 2011

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

Помимо этого, возможно, вы можете черпать вдохновение из библиотеки Poco C ++.Эта библиотека обычно следует за идиомой одного класса на заголовок, но есть исключения.Например, вся иерархия исключений кодируется для одного заголовка и исходного файла с использованием системы на основе макросов (см. Exception.h и Exception.cpp ).

0 голосов
/ 05 января 2011

Разве не все варианты могут быть шаблонами?

...