Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102

    Typedef con classi template

    Salve a tutti,
    avendo questa classe:
    codice:
    template< class T >
    class prova{
    	public:
    		typedef T tipoElemento;
    		
    		getElemento();
    		/.../
    	private:
    		tipoElemento e;
    };
    Vorrei creare una alias per il nome della classe e del parametro T, come in questo esempio (ovviamente errato ):
    codice:
    template< class T >
    typedef prova< T > prova;
    
    template< class T >
    typedef prova< T >::tipoElemento tipoElemento;
    Ho fatto molte ricerche ma non riesco a trovare una soluzione. Non è possibile creare degli alias quando si parla di template ??

    Grazie a tutti!

  2. #2
    I typedef non si possono templatizzare, consentono di creare alias solo per tipi completamente definiti; tuttavia, dal C++11 esistono i cosiddetti "type alias", che si fanno tramite la direttiva using.
    http://en.cppreference.com/w/cpp/language/type_alias
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Originariamente inviato da MItaly
    I typedef non si possono templatizzare, consentono di creare alias solo per tipi completamente definiti; tuttavia, dal C++11 esistono i cosiddetti "type alias", che si fanno tramite la direttiva using.
    http://en.cppreference.com/w/cpp/language/type_alias
    codice:
    template< class T >
    using tipoelem = prova< T >::tipoElemento;
    codice:
    error: expected unqualified-id before ‘using’
    Non saprei...dove sbaglio ?

  4. #4
    Probabilmente stai compilando in modalità C++98/C++03; che compilatore stai usando (e in particolare, che versione)?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Originariamente inviato da MItaly
    Probabilmente stai compilando in modalità C++98/C++03; che compilatore stai usando (e in particolare, che versione)?
    g++ (GCC) 4.8.1

  6. #6
    Aggiungi sulla linea di comando il parametro -std=c++11.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Originariamente inviato da MItaly
    Aggiungi sulla linea di comando il parametro -std=c++11.
    Gia provato, continua a restituirmi lo stesso errore...

    EDIT
    Mi da errore quando cerco di utilizzare l'alias creato...

  8. #8
    codice:
    template< class T >
    using tipoelem = typename prova< T >::tipoElemento;
    Il typename è richiesto dato che tipoElemento è un tipo dipendente da template; la questione in generale è leggermente ingarbugliata, dai un'occhiata qui.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Originariamente inviato da MItaly
    codice:
    template< class T >
    using tipoelem = typename prova< T >::tipoElemento;
    Il typename è richiesto dato che tipoElemento è un tipo dipendente da template; la questione in generale è leggermente ingarbugliata, dai un'occhiata qui.
    Niente da fare, quando cerco di utilizzare l'alias creato il compilatore da errore.
    Non ne esco...

  10. #10
    Se ti limiti a dire "dà errore" non ne usciamo... Che errore dà? Puoi postare il codice completo?
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.