Newsgroup: it.comp.lang.c++
Titolo: PROBLEMA con un Template

Ragazzi, io ho un problemino ... e non saprei come uscirne fuori.
Io devo costruire un template schematizzato nel seguente modo:
template <class A,class B> class Pippo
{
private :
A var_1;
B var_2;
char *statement;
...
public :
Pippo(A x , B y) { var_1=x; var_2=B; ... };
~Pippo() { ... };
 ...
};
A questo punto devo inserire una funzione pubblica nel template che
costruisca una stringa con i valori delle variabili nel seguente modo:
void StrInsert ()
{
sprintf(statement,"var_1 = %s , var_2 = %s \n",(char *)var_1,(char *)var_2);
}
Ora, supponendo che il mio main contenga questo codice:
void main()
{
Pippo <char,int> Prova_1('s',2);
Pippo <int,char *> Prova_2(4,"stringa");
Prova_1.StrInsert();
Prova_2.StrInsert();
}
Quando compilo non ho problemi, ma quando lancio in esecuzione il tutto il
programma si blocca.
Ora, mi rendo conto che il problema risiede nell'istruzione sprintf della
funzione
StrInsert, ma la mia domanda č:
COME POSSO FARE AD INSERIRE IN UNA STRINGA I VALORI DI
ALCUNE VARIABILI PARAMETRIZZATE DI UN TEMPLATE?????
Io ho provato a forzare il casting trasformando tutto in char *, perň il
risultato
č stato quello che vi ho descritto.
Vi sarei molto grato  se mi potreste dare qualche dritta o qualche consiglio
in
merito.
Grazie.
Claudio.

 };
Manca l'allocazione di memoria per statement. La devi mettere nel
costruttore. E la relativa deallocazione nel distruttore.
EMG

 wrote in message
389000CA...@flashnet.it...


L'allocazione e la deallocazione di memoria per statement nel costruttore e
nel distruttore ce l'avevo messa, č solo che nell'esempio che ho fatto l'ho
omessa.
Comunque si blocca tutto. Sigh!
:(


 
-- 
"Time flies like an arrow; fruit flies like a banana."

Hai idea di cosa succede se var_1 o var_2 non sono (char*)? Fare il
casting a (char*) di un char (o di un int) arbitrario non ha in generale
molto senso , passarlo poi ad un printf con format "%s" ha effetti
assolutamente imprevedibili.
Max
Gli effetti imprevedibili li ho visti, eccome!!
Però il mio problema è che devo mettere i valori di queste variabili
nella stringa statement per forza. A questo punto, essendo in un template
io non posso a priori sapere di che tipo sono quelle variabili, poichè
se lo sapessi potrei tranquillamente usare nell'istruzione sprintf il
format %c, %d o %s. Quindi, non sapendo il tipo della variabile che
vado a passare alla stringa ho pensato di forzare il C a convertire
tutte le variabili in stringhe ed inserirle in statement. Però come ho
già detto non funziona.
A questo punto cosa fare?
In questo momento mi sorge una domanda, ...
E se io utilizzassi l'istruzione cout???
Però cout riguarda uno stream, non so se al C posso dirgli di andare
a mettere tutto quello che gli passo per cout in una variabile di
tipo char *.
Boh!
AIUTATEMI !!! PER FAVORE !!!

 
-- 


 tipo char *.
Molla anche i char* e usa le std::string (eventualmente potrai usare
c_str se e quando vorrai un const char* corrispondente).  Con la
classe stringstream (sempre in std::) otterrai cio` che desideri.
Alex



HO RISOLTO IL MIO PROBLEMA !!!!!!!!!!!!
GRAZIE TANTE PER LA DRITTA.
PURTROPPO DEVO DIRE CHE HO PECCATO.
INFATTI NON CONOSCEVO LA CLASSE
OSTRSTREAM E NON NE IMMAGINAVO NEMMENO
L'ESISTENZA.
GRAZIE, SPERO DI POTER RICAMBIARE UN GIORNO.