Newsgroup: it.comp.lang.c++
Titolo: richiesta su template e puntatori

Scusate la domanda niubba, ma non ho trovato nulla che possa aiutarmi per
risolvere il mio problema.
Al momento ho una classe che sfrutta i template, dove _all'interno_ della
classe, ho definito altre strutture
template <class tipoelem>
class Lista {
  typedef struct {
    struct nodo* predLista;
    tipoelem a;
    struct nodo* succLista;
  } nodo;
  typedef nodo* posizione;
  public:
  [...]
  private:
    posizione testa;
};
Ora il mio problema e' riuscire a creare una variabile di tipo posizione
fuori dalla lista (ad esempio, nel main)
come dovrei definire (e dove) per risolvere il mio problema?
-- 
§                 ZeD                 §
§             04/08/2004              §
§       S. Giovanni M. Vianney        §
§ Now listening: Vasco Rossi - Delusa §

 
non puoi, perchè posizione non è un typedef visibile pubblicamente, ma è 
confinato all'interno di Lista. *Se* fosse pubblico, potresti definire 
una variabile in questo modo (ad esempio):
Lista<int>::posizione variabile;
-- 
"Come un nano sull'orlo di un orinale dovevo muovermi in punta dei piedi"

 Lista<int>::posizione variabile;
purtroppo devo scartare questa soluzione, o almeno preferirne altre.
Potendo modificare la classe, esisterebbe un modo per poter definire
semplicemente
posizione variabile;
nel main?
-- 
§          ZeD           §
§       04/08/2004       §
§ S. Giovanni M. Vianney §
§    Now listening:      §

 nel main?
Credo d' aver risolto, con una 
typedef void* posizione;
fuori dal template, e facendo il casting nei casi necessari.
Se pero' c' e' una soluzione migliore, potreste suggerirmela?
-- 
§                  ZeD                  §
§              05/08/2004               §
§ Dedicaz. Basilica S. Maria-S. Erminio §
§            Now listening:             §

 
se poi devi fare i casting, tanto vale che scrivi direttamente 
"Lista<nome_tipo>::posizione", no? perchè questa limitazione del dover 
scrivere per forza "posizione"?


 perchè questa limitazione del dover scrivere per forza "posizione"?
erh... si chiamano "compiti per le vacanze"...
fondamentalmente devo fare delle librerie di liste, pile, code, alberi,
grafi e altre belle ammenicolita' almeno con un paio di implementazioni
ciascuna. Ovviamente devono essere intercambiabili, dunque, nei programmi
che le utilizzano devo usare sempre variabili di tipo "posizione" (che poi
la libreria di volta in volta trasformera' in puntatori, interi, o quel
che e')


 come dovrei definire (e dove) per risolvere il mio problema?
Come ti e` gia` stato detto, basta rendere pubblico posizione.
Se Lista<int>::posizione non ti piace (perche'?), puoi usare typedef
(al di fuori di Lista):
  typedef Lista<int>::posizione posizione;
In questo modo pero` posizione vale solo per Lista<int> e non per
Lista<altri_tipi>.  Se ti serve anche per altri tipi devi ripetere il
typedef:
  typedef Lista<double>::posizione posizione_d;
  typedef Lista<string>::posizione posizione_s;
  ...
In pratica una schifezza. 
(Cosa c'e` che non va in Lista<int>::posizione ?)
*Non* si puo` fare un typedef generico che risolverebbe il problema:
  template <typename T>
  typedef Lista<T>::posizione posizione;  // errore
        Mauro

 Se pero' c' e' una soluzione migliore, potreste suggerirmela?
Qualsiasi cosa e` meglio di usare void* e cast.
Perche' poi una cosa tipo
  void* p = get_pos();
  func(static_cast<Lista<int>::posizione>(p));
sarebbe meglio di
  Lista<int>::posizione p = get_pos();
  func(p);
        Mauro

   typedef Lista<T>::posizione posizione;  // errore
ecco, questo e' un vero peccato.
