Bonjour,
J'ai un code du type ci-dessous (simplifié pour s'y retrouver). Ce code me génère un warning
Warning que je peux désactiver avec :warning C4250: 'B1C2' : inherits 'B1::B1::b' via dominance
warning C4250: 'B1C2' : inherits 'C2::C2::c' via dominanceJ'ai en gros deux questions :#pragma warning(disable : 4250)
1) Est-il possible d'éviter ce warning en gardant le même esprit d'architecture ?
2) Sinon, existe-t-il des alternatives à cette architecture diamant qui ne me parait pas très propre. Je pense peut-être à utiliser des templates mais je ne sais pas trop comment m'y prendre ici malgré lecture de tutos/faq. J'ai également consulté le tuto sur les classes de traits et de politiques ici mais mes fonctions de sont pas statiques.
Merci de votre aide
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 #include <stdio.h> #include <stdlib.h> //#pragma warning(disable : 4250) class A{ public: A(){}; void a(){ b(); c(); }; virtual void b() = 0; virtual void c() = 0; }; class B1 : public virtual A{ public: B1():A(){}; void b(){ printf("B1"); }; }; class B2 : public virtual A{ public: B2() :A(){}; void b(){ printf("B2"); }; }; class C1 : public virtual A{ public: C1() :A(){}; void c(){ printf("C1"); }; }; class C2 : public virtual A{ public: C2() :A(){}; void c(){ printf("C2"); }; }; class B1C2 : public B1, public C2{ public: B1C2() : A(), B1(), C2(){}; }; void main(int argc, char* argv[]) { B1C2* b1c2 = new B1C2(); b1c2->a(); printf("\n"); system("pause"); }
Partager