Bonjour,
Je désire définir au sein d'une classe un traitant de signal qui modifie un attribue. En schématisant :
Seulement, ceci ne peut pas fonctionner car l'attribut "att" n'existe pas pour le traitant "fct" car ce n'est pas une méthode de la classe. Si je mets le traitant en tant que méthode de la classe, la structure de sigaction n'est plus valide :
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32 A.h : class A{ private : bool att1; public : A(); ~A(); } A.c : void fct(int signum) { att = true; } A::A() { struct sigaction gest; gest.sa_handler = fct; gest.sa_flags = 0; sigaction(SIGUSR1, &gest, NULL); att = false; } A::~A() { }
error: argument of type ‘void (A:(int)’ does not match ‘void (*)(int)’
J'ai pensé à faire une méthode "setAtt()", mais comme celle-ci ne peut être utilisée que dans une instance de l'objet, je ne peux l'utiliser comme tel dans le traitant.
Je voudrais donc savoir plusieurs choses :
Déjà, est-ce que c'est propre de déclarer un traitant dans une classe ? (bien que je n'ai besoin d'instancier qu'un seul objet, si je voulais en instancier plusieurs, le même traitant serait redéclarer)
Y a-t-il un moyen plus intelligent de le déclarer ? (je dois le déclarer dans le main ? A ce moment-là, comment puis-je "donner un argument" au traitant qui manipulerait alors un objet de type A ?)
Je vous remercie d'avance pour vos réponses.
Syl
Partager