Я опубликовал несколько вопросов до этого относительно использования std::function
для быстрых делегатов и способов, которыми можно хранить std::function
в коллекции, чтобы продемонстрировать поведение события, которое можно добавить, и удален в. Я также поинтересовался наилучшей практикой при написании целой тонны маленьких классов типа EventArg
, и это небольшое дизайнерское решение также было положено на ум. Это отличное сообщество!
Теперь, не обращая внимания на преамбулу, я должен определить свою структуру, и пришло время написать все обработчики, которые будут обрабатывать входящие данные. У меня есть std::map
, это выглядит так:
typedef std::function<void(const CommandData&)> CommandDelegate;
typedef boost::shared_ptr<CommandDelegate> CommandDelegatePtr;
typedef std::map<short, CommandDelegatePtr> CommandMap;
И я хочу добавить к этому около 200 обработчиков. У меня есть выбор между стандартными функциями-членами и лямбдами.
Первое, о чем я подумал, когда думал о функциях-членах, это 200 объявлений и 200 реализаций и один исходный файл с большой задницей.
Вместо того, чтобы загрязнять мой класс всеми этими обработчиками, я подумал: «Ну, это всего лишь дескрипторы, почему бы не использовать лямбда-выражения? Кажется, достаточно просто, когда класс создается, он может назначать все эти анонимные функции карте. сделал!
Тогда я понял, что конструктор будет огромным. Я мог бы вызвать вспомогательную функцию initializeMap, которая могла бы быть в своем собственном файле из-за размера.
Что вы, ребята, думаете?
- 200 объявлений в файле
.h
, 200 реализаций (среди прочих функций) в файле .cpp
- 200 объявлений в файле
.h
, отдельный файл реализации 'handlers.cpp`
- Нет объявлений, в ctor выделено 200 лямбд
- Нет объявлений, 200 лямбд, назначенных в функции
initializeMap
в своем собственном файле.
Заранее спасибо!