Перед этим я опубликовал несколько вопросов, касающихся использования 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` - Нет объявлений, 200 лямбда назначено в ctor
- Никаких объявлений, 200 лямбд, назначенных в функции
initializeMap
в собственном файле.
Заранее спасибо!