Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [c++] Sintassi template

    Ho una template class al cui interno viene dichiarato un metodo: una funzione template.

    codice:
    template <typename T>
    class myClass
    {
    	template <typename Go>
    	void foo( Go apply )
    	{
    		Go( minnie );
    	}
    	
    	long minnie;
    };

    Se implemento il metodo all'interno della classe stessa nessun problema, ma qual'è la sintassi corretta per porre all'interno della classe solo la dichiarazione del metodo e implementarla al di fuori? Inoltre quale sarebbe la differenza? Cambia realmente qualcosa se dichiaro inline il metodo? E se si in quali condizioni?

    Grazie.
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    codice:
    template <typename T>
    class myClass
    {
    	template <typename Go>
    	void foo( Go apply );
    	
    	long minnie;
    };
    
    template <typename T>
    template <typename Go>
    inline void MyClass<T>::foo(Go apply) {
        Go( minnie )
    }
    L'unica differenza è che in questo modo hai l'interfaccia più leggibile.
    Nota che inline è comunque necessario per evitare problemi di link.

  3. #3
    Infatti, ma a me questo


    codice:
    template <typename T, LIST Type = Singly>
    class list
    {
    	struct node {};
    	
    	template <typename Function>
    	node * find( const_reference value, Function compare );
    };
    
    
    template <typename T, LIST Type>
    template <typename Function>
    node * list<T, Type>::find( const_reference value, Function compare ) {}

    Continua a darmi lo stesso errore: error: too many template-parameter-lists


    Cosa che invece non avviene per altri membri, per questo mi chiedevo se forse stavo sbagliando qualcosa... Dov'è l'errore?
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Servirebbe la classe completa. Così a occhio dovrebbe essere:
    codice:
    template <typename T, typename LIST = Singly  >
    class list
    {
    	struct node {};
    	
    	template <typename Function>
    	node * find( const_reference value, Function compare );
    };
    
    
    template <typename T, typename LIST>
    template <typename Function>
    typename list<T, LIST>::node * list<T, LIST>::find( const_reference value, Function compare ) {}

  5. #5
    Si, giusto...

    Alla fine l'errore era dovuto al fatto che la dichiarazione della funzione nella classe (quella vera) stava sopra la dichiarazione della struttura....

    Grazie comunque
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

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.