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
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)...);
        }
    }
};
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.

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
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;
};
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
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 }
};
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.
Ç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