Bonjour tout le monde.

Je dois convertir un progrmme du C en C++, à cause des pilotes utilisés précédament en C, et seulement disponible en C++ dans la dernière version.
J'ai déjà eliminé pas mal de petits particularités, mais il y en a quelques uns qui me bloquent.

J'ai une structure qui est initialisé à sa déclaration :
<<
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
18
const struct driver_t beirlistener_driver = {
        .name = "beirlistener_driver",
        .cfg_ctl = {
                .cfg_new = &beirlistener_cfg_new,
                .cfg_parse = &beirlistener_cfg_parse,
                .cfg_del = &beirlistener_cfg_del,
                .cfg_parse_ended = &beirlistener_cfg_parse_end
        },
        .ctx_ctl = {
                .ctx_new = &beirlistener_ctx_new,
                .ctx_del = &beirlistener_ctx_del
        },
        .thread_ctl = {
                .run = &beirlistener_run,
                .queue_clean = NULL,
                .stop = &thread_request_stop_intr
        }
};
>>
cfg_ctl, ctx_ctl and thread_ctl sont des structures qui contiennent des pointeurs vers des fonctions.
Ces structures contiennent des pointeurs vers des fonctions qui seront utilisés pour initialiser, exécuter et supprimer un thread. Il est utilisé pour différents threads dans différents fichiers, et est initialisé avec les fonctions nécessaires. L'exemple affiché en est un parmi d'autres.

Mais ce n'est pas quelque chose qui peux se faire en C++, seulement en C.
La solution que je souhaite mettre en application est de déclarer un constructeur pour la structure, qui reçois les adresses des fonctions, et initialise les variables de la structure. Ainsi, la déclaration de la structure se ferai ainsi :
<<
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
const struct driver_t beirlistener_driver = {"beirlistener_driver",
&beirlistener_cfg_new, &beirlistener_cfg_parse, ...};
>>
J'ai essayé de déclarer la structure de la manière suivante ... :
<<
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
struct driver_t {
        char                    *       name;
        struct config_ctl_t             cfg_ctl;
        struct context_ctl_t            ctx_ctl;
        struct thread_ctl_t             thread_ctl;
 
        driver_t(char * cname, int (*fcn)(void **)) {
                name = cname;
                cfg_ctl.cfg_new = fcn;
        }
};
>>
... pour fonctionner avec la déclaration, mais ça ne fonctionne pas. Il ne semble pas reconnaitre comme paramètre un pointeur de fonction dans le constructeur et donne le message d'erreur suivant (avec g++) :
<<
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
/home/anton/Projects/splusserver3/src/beirlistener.c:90: error: scalar
object ‘beirlistener_driver’ requires one element in initializer
>>

J'ai fait des recherches pour trouver une solution, mais je n'en ai pas encore trouvé. Si quelqu'un a des lumières pour m'éclairer et trouver une solution à ce problème, cette personne aurai toute ma gratitude.
Merci d'avance.

Mad Ant