Sto utilizzando segnali (in particolare Boost signals2
) per creare un API e un modello di protocollo basati su eventi.
La maggior parte degli elementi ha i propri segnali e di solito ci sono multipli di ogni elemento.
Considera un'entità di base, una user
; tra gli altri, l'utente può lasciare il sistema, quindi ho bisogno di avere un segnale di congedo.
La domanda è: l'oggetto dell'utente deve essere passato al gestore del segnale? Cioè:.
class user {
signals<void(user&)> on_leave;
//...
};
Se ci fosse std::bind
e lambda allora questa decisione sarebbe più facile da fare, ma con quelli che passano l'utente potrebbe sembrare ridondante, cioè:
user.connect_on_leave(
[](user& u) {
//well I could already refer to user if I wanted to
}
);
E lo stesso con l'associazione, potrei fare qualcosa di simile
user.connect_on_leave(std::bind(my_hander, std::ref(usr));
Inoltre, in generale, è meglio per ogni segnale passare semplicemente all'utente qualunque sia il suo interesse o avere una sorta di tipo message
con cui operano tutti i segnali?
E la mia ultima domanda: a che punto dovrei smettere di normalizzare i dati? Se più segnali condividono lo stesso "payload", è meglio avere segnali separati come,
on_change_name(str)
on_msg_sent(str)
on_leave(str)
o
on_action(action, str)