Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di Pierock
    Registrato dal
    Dec 2008
    Messaggi
    102

    [C++] template<class T> ... annidarli?

    Ciao ragazzi... ho bisogno di farvi un paio di domande...
    sto programmando da un po' in C++ e ieri ho iniziato a cercare di capire qlc riguardo a vari "template" e ADT ... vi confesso con nn poca difficoltà
    ...
    ma come si dice... tanto ci devi sbattere la testa ke ti deve riuscire... infatti sono riuscito a realizzare una struttura di tipo "albero" in questa maniera....
    ..ora...

    facciamo il punto della situazione.....
    realizzando il mio albero con template nn facevo altro che scrivere Albero<Tipoelem> doce Tipoelem era un'altra piccola struttura realizzata in precedenza...

    ora... ho intenzione di complicare un attimo le cose...
    ho creato una struttura nodo ... che desidero contenga elementi di tipo Tipoelem
    e ke il mio fantastico alberello... diventi una struttura di nodi di Tipoelem
    ....
    fare una cosa del tipo ... Albero<Nodo<Tipoelem>> .. è corretto ... o è solo frutto della mia mente contorta???

    ...... avrei poi un'altro paio di cosucce da kiedere... ma se già fino qui ho detto fregnacce, è inutile anke solo starne a parlare...

    GRAZIE MILLE A TUTTI ... spero solo di essere stato COMPRENSIBILE... ma oramai mi è andato totalmente in pappa il cevello... !!!
    ehehhe

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    E' corretto, solo che devi stare attento a mettere uno spazio nella dichiarazione di chiusura del template altrimenti viene interpretato come un operatore.
    codice:
     Albero<Nodo<Tipoelem> >
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it L'avatar di Pierock
    Registrato dal
    Dec 2008
    Messaggi
    102
    mitico... con questa dritta mi hai evitato dei sicuri grattacapi!!!

    ora però sono un po' incerto su come provedere.... le mie 2 classi le ho scritte..
    Nodo.h e Alber.h
    però francamente nn saprei se sto procedendo nella maniera giusta?
    posso mandartele per avere la seconda dritta di oggi?

    i rispoettivi *.cpp me la vedo io....
    ovviamente Nodo.cpp è già bello è pronto!

  4. #4
    Utente di HTML.it L'avatar di Pierock
    Registrato dal
    Dec 2008
    Messaggi
    102
    ok... sono nel pallone?

    domanda... se il mio intento è quello di create nel main
    Albero<Nodo<Tipoelem> > ... come faccio nel file Albero.cpp ad usare elemento (contenuto in Tipoelem) o il costruttore o a creare un aggetto Nodo ??

    ... mi sa ke sono andato a buttare in una strada senza uscita

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Non puoi usare un template non esplicitato in un file .cpp ma devi provvedere a dichiarazione e implementazione direttamente nel file header.
    A parte il Comeau compiler, al momento attuale nessun compilatore prevede la extern declaration per un template.

    Vedi FAQ http://www.parashift.com/c++-faq-lit...html#faq-35.12
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  6. #6
    Utente di HTML.it L'avatar di Pierock
    Registrato dal
    Dec 2008
    Messaggi
    102
    mmmm ... si infatti.... ero arrivato ank'io alla stessa triste conclusione..
    infatti stavo già procedendo su quella strada...

    anke se francamente non capisco più quale sia l'utilità di un template a questo punto...
    ovvero .. avendo intenzione di fare una cosa tipo

    Albero<Nodo<Tipoelem>>
    ma DOVENDO necessariamente includere Tipoelem.cpp in Albero.h ...
    vorrebbe dire ke sto creando struttura Albero GIA SAPENDO che sarà di elementi a base di TIPOELEM ... !!

    .. quindi i template diventano semplicemente na presa in giro...

    ... sarebbe stato molto più intelliggente da parte mia costruire la classe Nodo senza templare, includendovi Tipoelem....
    per poi fare una più semplice (e quindi corretta) Albero<Nodo>

    .............per la serie............
    tardi ma ci arrivo!!!!


    Grazie mille per la collaborazione shodan

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da Pierock
    ... sarebbe stato molto più intelliggente da parte mia costruire la classe Nodo senza templare, includendovi Tipoelem....
    per poi fare una più semplice (e quindi corretta) Albero<Nodo>
    Così però sarai costretto ad esplicitare tutti i possibili nodi, visto che di suo Tipoelem è solo un tipo astratto. In caso contrario il compilatore protesta se trova un Tipoelem nel .cpp
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  8. #8
    Utente di HTML.it L'avatar di Pierock
    Registrato dal
    Dec 2008
    Messaggi
    102
    in ke senso astratto?

    Tipoelem è una classe costruita da me... di cui quindi ho Tipoelem.h e Tipoelem.cpp
    ...
    quindi mi basterebbo solo aggiundere
    codice:
    #include "Tipoelem.cpp"
    in "Nodo.h"
    aggiungendo magari un bel

    codice:
    typedef Tipoele elemento;
    ed il gioco dovrebbe essere fatto!

  9. #9
    Mi sa che non ti è chiaro l'uso dei template. I template implementano il polimorfismo parametrico, dove il tipo delle variabili è esso stesso una variabile.
    Questo è un modo per riutilizzare il codice su tipi diversi (un altro sistema p.e. è il polimorfimo per inclusione, quello del paradigma OOP).
    Ciò che includi tra <> è il tipo astratto, la variabile di tipo.
    Facciamo un esempio:

    Codice PHP:
    template <class T> class Albero{
    ....
    }; 
    A questo punto tu potrai instanziare:

    Codice PHP:
    Albero<intalbero1;
    Albero<tipoelemalbero2
    Potrai creare alberi di interi o di tipoelem sfruttando lo stesso codice del template.
    La classe T è astratta nel senso che non esiste, è la variabile generica di tipo.
    ...

  10. #10
    Utente di HTML.it L'avatar di Pierock
    Registrato dal
    Dec 2008
    Messaggi
    102
    e si...
    ed è esattamente quello ke ho fatto! :P

    forse mi sarò espresso male... tanto da averti fatto credere di nn aver capito come funzionino (i template)...
    ma ti assicuro sto procedendo esattamente come suggerisci anke tu..!!!

    grazie mille lo stesso per la disponibilità!!!

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.