ok, ho risolto cosi:
codice:
class CimporterBase
{
public:
CimporterBase(){};
virtual int GetAdd() = 0;
};
class CimporterBaseT
{
public:
CimporterBaseT(){};
virtual int GetValue() = 0;
virtual int GetType() = 0;
};
class Pippo :
public CimporterBase {
public:
Pippo(){};
struct SubType{
static int n1;
};
int GetAdd(){
return Pippo::SubType::n1;
}
};
class Pluto:
public CimporterBase{
public:
Pluto();
struct SubType{
static int n1;
};
int GetAdd(){
return Pluto::SubType::n1;
}
};
int Pippo::SubType::n1 = 0;
int Pluto::SubType::n1 = 0;
template <typename T>
class MyClass : CimporterBaseT{
public:
MyClass();
int GetValue()
{
return nValue;
}
int GetType(){
return ptr->n1;
}
typename T::SubType* GetStruct(){
return ptr;
}
typename T::SubType * ptr;
};
////////////////////////////////////main
CImporter Importer;
CimporterBaseT* base = NULL;
Importer.create(base, 0);
int n;
n = base->GetValue();
n = base->GetType();
Importer.create(base, 1);
n = base->GetValue();
n = base->GetType();
MyClass è la classe da configurare e la configuro passandogli come tipo gli oggetti Pippo o Pluto , che derivano dalla stessa classe astratta CimporterBase .
ho usato la classe astratta CimporterBaseT per "passare" come argomento il template alla funzione che configura e per dichiarare le funzioni comuni, virtuali nella classe base.
adesso i membri delle strutture T::SubType sono accessibili, ma uno per uno , creando una funzione apposita.
Mi piacerebbe creare una funzione o qualcosa per ritornare una o piu strutture configurate dalle classi pippo e pluto(che le hanno in pancia pronte per il typename delal classe template) , in modo che ,passando come argomento template pippo o pluto al template mi ritrovo una classe template con una struttura dati , pronta per essere riempita e passata all'oggetto (che è stato creato richiamando l'indirizzo della funzione n1 che adesso per semplicità è un int ma in realta è una funzione che crea un istanza dell oggetto col new)sarà poi l'importatore vero e proprio a collegare i dati dalle strutture all oggetto da riempire.
grazie.