[Résolu] Constructeur de copie et Template: Transtypage
Bonjour,
J'essaye de faire un exercice de C++, et je coince.
En gros, j'ai une classe template "array" dans laquelle je peux mettre N valeurs de type T.
Voila le source:
Code:
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 <iostream>
using namespace std;
class A {
};
class B: public A {
};
template <int S, typename T>
class array {
// friend ostream& operator<< <> (ostream&, const array&);
public:
class BadIndex {};
array (const T& v=T()) {for(int i=0 ; i<S ; i++) elem[i] = v;}
array (const array<S, T >& tableau) {
for(int i=0 ; i<S, i++)
elem[i] = tableau.elem[i];
}
T& operator[] (int x) {
if (x<0 || x>=S) throw BadIndex();
return elem[x];
}
const T& operator[] (int x) const {
if (x<0 || x>=S) throw BadIndex();
return elem[x];
}
protected:
T elem[S];
};
int main () {
array<5, int> ti(1);
array<5, B*> tpb;
array<5, double> td = ti;
array<5, A*> tpa = tpb;
} |
Mon problème est ici:
Code:
1 2 3
|
array<5, double> td = ti;
array<5, A*> tpa = tpb; |
En effet, le compilateur m'insulte et me dis qu'une conversion est requise entre l'array<5, int> et l'array<5, double>. Ca je l'avais compris ...
Mais j'ai l'impression qu'il ne prends pas en compte mon constructeur de copie, car avec ou sans, l'erreur de compil est là même.
Il y a surement une "subtilité" sur les templates qui m'échappe, mais laquelle ?
Si vous pouviez donc me dire comment faire pour que le transtypage se fasse entre les types T et T' des 2 array) et pas entre le array<S,T> et array<S, T'>
Merci d'avance :)