alessandrom
02-02-2012, 20:57
Ciao a tutti,
sto facendo alcune prove con C++ e sono arrivato alle classi template.
Ho fatto una classe templata di questo tipo:
template<typename T>
class Classe{
struct Dato{
int K;
T data;
Dato* next;
}
public:
Dato *data;
}
e fin qui nessun problema. i problemi nascono quando ho la necessità di fare la conversione di una classe già esistente.
Cioè vorrei poter fare:
Classe<int> a();
Classe<double> b(a);
ma il compilatore mi dice che non esistono funzioni in grado di convertire Classe<int>::Dato in Classe<double>:: Dato.
Ho provato a creare una funzione che scorre la lista Dato originale e la copia, ma funziona solo quando il tipo è lo stesso (mettendo come membro della funzione Dato* d), ma se provo a forzare il tipo dato diverso scrivendo
template<typename T1>
void foo(Classe<T1>::Dato* d){
//Leggi la struct originale e copia chiave e valore convertito.
}
mi dice che d non è stata definita in questo scope.
Quale sarebbe la procedura corretta?
sto facendo alcune prove con C++ e sono arrivato alle classi template.
Ho fatto una classe templata di questo tipo:
template<typename T>
class Classe{
struct Dato{
int K;
T data;
Dato* next;
}
public:
Dato *data;
}
e fin qui nessun problema. i problemi nascono quando ho la necessità di fare la conversione di una classe già esistente.
Cioè vorrei poter fare:
Classe<int> a();
Classe<double> b(a);
ma il compilatore mi dice che non esistono funzioni in grado di convertire Classe<int>::Dato in Classe<double>:: Dato.
Ho provato a creare una funzione che scorre la lista Dato originale e la copia, ma funziona solo quando il tipo è lo stesso (mettendo come membro della funzione Dato* d), ma se provo a forzare il tipo dato diverso scrivendo
template<typename T1>
void foo(Classe<T1>::Dato* d){
//Leggi la struct originale e copia chiave e valore convertito.
}
mi dice che d non è stata definita in questo scope.
Quale sarebbe la procedura corretta?