Это вопрос с ответом, цель которого - предложить читателям предложить свои собственные решения.
Я совершенно уверен, что там есть более умные подходы, чем у меня, поэтому я хотел бы знать, что это за решения.
Пожалуйста, поделитесь своими знаниями, добавив свои собственные ответы!!
Цель состоит в том, чтобы создать класс эмиттера, который можно использовать для отправки нескольких событий.
Важная функция, которую я хочу быть в эмиттере, - это простая в использовании функция регистрации, позволяющая подключить слушателей к эмиттеру.
Другими словами, я не хочу писать функции/методы, предназначенные для подключения всех слушателей к эмиттеру, поскольку это может быть подвержено ошибкам, и я обнаружил, что не раз искал ошибку, которая была вызвана пропущенной строка кода из-за этого (строка, которая, конечно, зарегистрировала бы N-го слушателя).
Представьте себе следующие структуры:
struct E1 { };
struct S {
void receive(const E1 &ev) { /* do something */ }
};
Объект регистрации, который я ищу, - это такое решение, для которого достаточно следующих строк кода:
S s;
emitter.reg(s);
И это все, даже если в будущем возникает требование добавления еще одного слушателя в struct S
в качестве примера:
struct E1 { };
struct E2 { };
struct S {
void receive(const E1 &ev) { /* do something */ }
void receive(const E2 &ev) { /* do something */ }
};
Как я могу написать такой эмиттер?