Mesdames, Messieurs,
Je me permets de venir vers vous avec une petite question... Après un petit moment d'arrêt de la programmation en C++, je m'y remets et je ne vous cache pas que j'ai beaucoup perdu... (mais à ce qu'il paraît c'est comme le vélo ^^)
Pour une question pratique, je cherche à avoir une classe me permettant de gérer mes envois d'alertes. Je pensais en grossier à une classe du genre
Mon but ici est de pouvoir instancier un Alerter de chaque type (donc potentiellement avec un nombre de paramètre variable) et de pouvoir envoyer un message à tous mes alerters.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 class AlerterManager { enum TYPE { MAIL, TCHAT, SMS }; private: std::vector<IAlerter *> _alerters; public: AlerterManager() {} template <typename ...Args> void addNewAlerter(TYPE alerterType, Args &&...args); void sendMessage(const std::string &format, Args &&...args) { vector_iteration { iterator->sendMessage(format, std::forward<Args>(args)...); } } };
Afin de rester générique autant que possible et d'essayer de garder un code clair, je voulais utiliser le polymorphisme en commençant par une classe abstraite ressemblant à qqch du genre
et du coup, implémenter mes différents alerters dans le genre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class iAlerter { public: template <typename ...Args> virtual void sendMessage(const std::string &format, Args &&...args) = 0; };
Le problème est que je ne peux pas utiliser les variadics dans une classe abstraite et ... je ne vois pas du tout comment contourner mon problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class TchatAlerter : public iAlerter { private: SOCKET_TYPE _sock; std::string _host, _login, _passwd; public: TchatAlerter(const std::string &host, const std::string &login, const std::string &passwd) : _host(host), _login(login), _passwd(passwd) { // INITIATE SOCKET HERE } ~TchatAlerter() {} virtual void sendMessage(const std::string &format, Args &&...args) { // SEND MESSAGE HERE } };
Ça fait plusieurs jours que je tourne en rond et je me permets donc de faire appel à des experts
Si jamais vous aviez ne serait-ce qu'une petite piste...
Merci d'avance
Cordialement,
Julien BAUMGARTEN
Partager