std::function
из параметров шаблона события.template< typename >
class Event;
template< typename TResult, typename... TArguments >
class Event<TResult ( TArguments... )> final
{
};
TResult
и TArguments
для определения оператора функционального вызова.std::function
здесь? Для чего ты обязываешь своего пользователя инстанцировать шаблон события именно таким образом?template< typename >
можно получить и тип результата функции, и типы всех ее параметров всего за одну частичную специализацию шаблона.Event
никуда не годится. Он неконтролируемый вообще.void operator+=(auto&& handler)
auto&&
- это универсальное обобщение. Конкретный тип из него будет выведен в момент передачи аргумента._handlers.emplace_front(std::forward<decltype(handler)>(handler));
код будет пытаться привести переданный тобой хендлер к типу THandler
.template<typename TObject, typename TEventArgs> requires std::derived_from<TEventArgs, EventArgs>
void operator()(TObject* sender, const TEventArgs& e) const
THandler
.std::function
. Постарайся разобраться с возможностями, которые тебе открывает мой совет._handlers
это коллекция делегатов, то они у тебя все одного типа и тебе про них все итак известно. баллистический симулятор с учетом сопр воздуха, аэродинамики снаряда и т.д
С учетом этого есть еще варианты?
const std::string& delimetr
- зачем эту сугубо приватную тонкость формата знать внешнему коду?std::any
используешь не по назначению. SerializationData
- это костыль как есть и назван отвратно. Какой шаблон проектирования применяешь - тебе и самому не ясно. А применяешь ты его не по месту и полностью неправильно.в качестве аргумента функции в самом объявлении функции указана ссылка.
Как так то? C++ автоматически берет ссылку?
Тут только прототип коллбека, т.е. тот же функтор. Все описано в репке. Не советую использовать этот код, я не задумывал его для использования в проектах.
Возможно код натолкнет тебя на какие-нибудь выводы. В моем коде все многократно серьезнее чем в этом прототипе, но событие и коллбек сделаны схожим с прототипом образом.
Ну и советую посмотреть на libsigc++ еще.