Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C++] Template e tipo

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]Template e tipo

    ciao.
    Ho creato due template Pippo1 e Pluto1 e una classe template

    codice:
    class Pippo1  {
    public:
    	Pippo1(){};
    	struct SubType{
    		static int n1;
    	};
    	
    };
    
    class Pluto1{
    public:
    	Pluto1();
    	struct SubType{
    		static int n1;
    	};
    	
    };
    
    template <typename T>
    class MyClass {
    public:
    
    	MyClass(){}
    
    	typename T::SubType * ptr;
    	static int nValue;
    };
    di queste due variabili vado a settare:
    Pippo1::SubType::n1 = 1;
    Pluto1::SubType::n1 = 2;

    int nEntityID = -1, nEntityType ;
    ora vorrei chiamando pApi->ImportEntityDS andare a settare il tipo per es vorrei poter fare:
    MyClass<Pluto1> pBase;
    e
    int n = pBase.ptr->n1;//mi dovrebbe restiture 2
    o
    MyClass<Pippo1> pBase;
    e
    int n = pBase.ptr->n1;//mi dovrebbe restiture 1

    solo vorrei settare il tipo passato a MyClass<???> all interno della funzione pApi->ImportEntityDS
    il tipo all interno di pApi->ImportEntityDS lo sceglierei in compile time , ho capito
    che i template agiscono solo in questo frangente.
    è possibile?
    come faccio a farmi restituire un tipo impostato all' interno della funzione?
    T = pApi->ImportEntityDS(&nEntityID, &nEntityType, pBase);???

    posso usare delle sorte di classi base coi template?
    grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    up

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.