Bonjour,

Je suis en traine de developer une clase de base ( classe abstraite) pou heriter de ce classe deux classes types.

mon clase de base :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
classe CBase
{
   public :
        void fct1();
        void fct2();
   protected :
        void fct3();
        void fct4() = 0 ;
        CBase() // afin d'initialiser des membres privées.
  private:
 
       socket_TCP  socket_ // socket juste pour dire que je definis une socket
}
Jusqu'a la je n'ai pas de soucis tout va bien ; j'herite et je definis ma fonction fct4() qui differe d'une classe a l'autre.

Les deux fonctions public ( fct1 et fct2) utilise le membre privé socket_, jusqu'a la je n'ai pas de problemes.

Apres que j'ai developper une classe B qui herite de CBAse, je voulais heriter une deuxieme class C, et c'est la que j'ai vu que j'ai un probleme de conception :
Le classe B utilise un socket de type TCP (socket_TCP), alors que mon class C le type de scoket est SSL .

L'idée de faire de faire une classe de base et heriter parceque les deux classes B et C differe juste de la fonction virtuelle pure (fct4) , mais apres je me suis rendu comptes qu'il differe aussi de type de socket.

J'ai pensé a deux solutions :
1. De rendre mon class CBase template , dans ce cas mon classe CBase devient :
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
 
template <typename T>
classe CBase
{
   public :
        void fct1();
        void fct2();
   protected :
        void fct3();
        void fct4() = 0 ;
        CBase() // afin d'initialiser des membres privées.
  private:
 
       T  socket_ // socket juste pour dire que je definis une socket
}
 
 
//et puis :
 
class B : public CBase <socket_TCP>
{
.....
};
 
class C : public CBAse <socket_SSL>
 {
.....
};
2. De changer completement le design, et de developper un seul class template et de specialiser la fonction fct4 (qui differe d'une classe a l'autre)


Pouriez vous m'indiquer si j'ai le bon resolution, si non quelles sont vos suggerations ?


Merci en avance