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