Bonjour,

J'ai un code du type ci-dessous (simplifié pour s'y retrouver). Ce code me génère un warning

warning C4250: 'B1C2' : inherits 'B1::B1::b' via dominance
warning C4250: 'B1C2' : inherits 'C2::C2::c' via dominance
Warning que je peux désactiver avec :
#pragma warning(disable : 4250)
J'ai en gros deux questions :
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.

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");
}
Merci de votre aide