Bonjour,
Me revoilà avec un problème à peine différent de celui que j'ai posté ici il y a quelques jours, et pourtant, malgré mes recherches, je suis bien en peine pour trouver la solution tout seul...
J'ai deux classes conteneurs très proches :
- L'une est à taille statique : sa capacité lui est passée par un paramètre template lors de l'instanciation, elle ne peut donc plus jamais varier ensuite. Le template de cette class prend donc deux paramètres : le type d'objet à contenir, et la capacité du conteneur.
- L'autre est à taille dynamique : la capacité du conteneur varie au cour de la vie d'une instance. Le template de la classe prend donc un seul et unique paramètre : le type d'objet à contenir.
Lorsque ces deux conteneurs possèdent le même type d'objet, j'aimerai pouvoir les concaténer et renvoyer le résultat dans un conteneur dynamique. Et je voudrai faire ça avec une fonction libre, amie des deux classes à la fois.
Malheureusement, je ne trouve pas la syntaxe adéquate, aucune de mes tentatives ne compile (Borland c++builder 6). Quelqu'un à une idée ?
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 template <class Objet, int Taille> class ConteneurStatique; template <class Objet> class ConteneurDynamique; template <class Objet, int Taille> const ConteneurDynamique<Objet> Add (const ConteneurDynamique<Objet> &DynamicData, const ConteneurStatique<Objet, Taille> &StaticData) { ConteneurDynamique<Objet> Result; // ... utilise les données protégées des arguments pour déterminer Result ... return Result; } template <class Objet, int Taille> class ConteneurStatique { public: // Ok friend const ConteneurDynamique<Objet> Add<> (const ConteneurDynamique<Objet> &DynamicData, const ConteneurStatique<Objet, Taille> &StaticData); protected: Objet Data[Taille]; }; template <class Objet> class ConteneurDynamique { public: // E2401 Invalid template argument list template <int Taille> friend const ConteneurDynamique<Objet> Add<> (const ConteneurDynamique<Objet> &DynamicData, const ConteneurStatique<Objet, Taille> &StaticData); protected: Objet *Data; }; int main(int argc, char *argv[]) { ConteneurDynamique<int> Data1; ConteneurStatique<int, 10> Data2; ConteneurDynamique<int> R = Add (Data1, Data2); return 0; }
Partager