Newsgroup: it.comp.lang.c++
Titolo: quando la derivazione è l'unica soluzione...

salve, allora ho questo problema:
ho una classe template container che  un contenitore di oggetti offre metodi
come firs,next,get,ecc.
Poi ho un'altra classe man_container che include questo container
questa classe inoltre dovrebbe offrire  la possibilità
di modificare i contenuti di container
tramite l'operatore[] (sovraccaricato) a livello di codice una cosa del
genere
man_container p;
//1
p["uno"] = "ciao";
e
//2
string p2 = p["uno"];
Il problema e nel fatto che l'operatore [] deve ritornare un reference per
poter permettere la forma numero due ma se container non da nessun "modo" di
modificare il proprio contenuto se non con un metodo
"set " come posso fare ?
a me l'unica soluzione che mi è venuta in mente e quella di derivare da
container aggiungere un metodo che
torna un reference ed usare questa in man_container ....
Voi avete qualche altra soluzione  ?


Come al solito e' piuttosto difficile capire cosa intendi, ma... vediamo 
se ci sono riuscito, nonostante tutto.
Tu hai un container (chiamiamolo X - quindi X<int> sara' il tipo di un 
contenitore di int, ad es.). Vuoi scrivere una classe che lo incapsula e 
offre in piu' un overloading dell'operatore di indicizzazione, sia in 
lettura che in scrittura (chiamiamolo Y), ovvero vuoi realizzare un 
proxy (tra l'altro, valuta se usare un proxy o la derivazione).
Da come l'hai messa, X non ha _alcun_ metodo per modificare i suoi 
contenuti. Se le cose stanno cosi', ovviame, _non puoi_ scrivere un Y 
siffatto. O la classe X non e' pensata per la modifica, o non e' 
completa - in entrambi i casi, il risultato non cambia.
Proponevi di fare un metodo che ritorni una reference... d'accordo, ma 
una reference _a cosa_? Se X non prevede modifica dei suoi elementi, le 
funzioni che lo manipolano torneranno elementi per copia, e quindi al 
massimo tu potresti ritornare delle reference alle copie (scorretto).
Se invece ho capito male, e X possiede un qualche metodo per modificare 
gli elementi, la cosa e' fattibile, ma la realizzazione cambia a seconda 
della semantica dei metodi che X offre.
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://mbellett.web.cs.unibo.it/
Jabber: RedGlow  - Linux registered user 299762 @ machine 213003

 string p2 = p["uno"];
stai cercando di riscrivere std::map<std::string, std::string> ?
perche' non usi i containers della s.l. ?  e' un compito ?
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy              ROT13: 
ybe...@cq.vasa.vg

 ha scritto nel messaggio
news:coa44m$aqm$1...@le1.cs.unibo.it...


 ha scritto nel messaggio
news:fK2qd.225686$b5.11...@news3.tin.it...


 cosa intendi per semantica ?
Sintassi e semantica sono i due aspetti principali di ogni programma (e 
di tante altre cose). A grandi linee, diciamo che la sintassi e' il 
"come e' fatto" qualcosa, mentre la semantica e' il "cosa fa". Quindi, 
in generale, intendevo dire: dipende da quello che i metodi di X fanno 
esattamente. Se X offre metodi per modificare i suoi contenuti, puoi 
fare (quello che ho capito io), altrimenti non c'e' nulla da fare.
Porta qualche esempio di utilizzo.
