Newsgroup: it.comp.lang.c++
Titolo: conversione variabili

scusate la domanda da superprincipainte, ma come converto una variabile
integer in un cstring?

 integer in un cstring?
http://google.it/groups?as_ugroup=it.comp.lang.c%2b%2b&as_usubject=int+char

 integer in un cstring?
Cosè un "cstring"?
Se intendi un "std::string", non ci sono operatori nativi. Puoi usare 
"std::ostrstream", e ti costruisci una funzioncina globale tipo quella che 
segue (vado a occhio non l'ho provato):
        #include <string>
        #include <strstream>
        ...
        std::string ::ltos( long _l ) {
                ostrstream o;
                o << _l;
                return std::string( o.str( ) );
        }
Se intendi un char *, puoi fare così:
        #include <memory>
        ...
        std::auto_ptr< char > ::ltos( long _l ) {
                std::auto_ptr rv( new char[ 32 ] );
                sprintf( rv.get( ), "%ld", _l );
                return rv;
        }
Ciao.
-- 
---
*************** | Have you ever retired a human by mystake?
*** Azathot *** |
*************** | To contact me, ask me gently. Thanks.

 ha scritto nel messaggio
news:sY5Xa.34603$sj6.7...@tornado.fastwebnet.it...
non e' sempre meglio non dichiarare mai funzioni e variabili che iniziano
con _ che potrebbero essere usate da qualche libreria e cosi' andare in
conflitto ???
so benissimo che le hai usate in argomento ad una funzione quindi non esci
dallo scop della suddetta funzione, ma era solo per dire che e' sempre
meglio non usare quelle dichiarazioni per un uso personale no ?
ciao


Anch'io avevo fatto una domanda simile ed ho saputo che CString non fa 
parte delle librerie C++ standard, ma fa parte della MFC, quindi la trovi 
solo sotto Visual C++ o sotto la Borland.
Comunque dai una vista a questo indirizzo, troverai la documentazione a 
tutti i metodi della classe:
http://msdn.microsoft.com/library/default.asp?url=/library/en-
 
us/vclib/html/vclrfcstringtclassmembers.asp
A te serve "Format", che funziona come un sprintf del C.
In teoria una cosa del genere dovrebbe funzionare:
CString str;
int valore = 123;
str.Format("%d",valore)
Ma non lo posso verificare perchè non ho istallato nè il compilatore 
Microsoft, nè quello Borland... io uso DEV-C++ con il compilatore dellaGNU.
Ciao.
Fammi sapere,
Checco.

 conflitto ???
La domanda è posta a sfondo etico o tecnico?
Tecnicamente no, perché lo scope dei parametri non è globale.
Eticamente neanche, perché i parametri sono qualcosa di profondamente 
diverso dalle variabili locali (hanno un ciclo di vita leggermente più 
lungo) e dagli attributi delle classi se parliamo di metodi (che hanno 
ciclo di vita più lungo).
In ogni caso, facilitano la scrittura di codice, perché non è necessario 
utilizzare nomi diversi per indicare delle copie dei parametri. Esempio:
        int funzione( int _qualcosa ) {
                int qualcosa( _qualcosa ); // "qualcosa" è copia del parametro
                ...
        }
invece di
        int funzione( int qualcosa ) {
                int copia_di_qualcosa( qualcosa ); // "qualcosa" è copia del parametro
                ...
        }
Ciao!


 conflitto ???
Gli identificatori che iniziano per '_' seguito da una lettera maiuscola e 
quelli che contengono due '_' di seguito sono riservati in qualunque 
contesto.  Gli identificatori che iniziano con '_' e non apprtengono alle 
precedenti categorie sono riservati soltanto nel namespace globale. 
([17.4.3.1.2])
Max

 utilizzare nomi diversi per indicare delle copie dei parametri. Esempio:
ora viene abbastanza bene usando minuscole ma potrebbe capitare di avere dei
define negli header in cui definiscono una certa parola , che ne so tipo
_CICCIO o meglio _A, se in questo caso vai a creare una funzione con dei
parametri con _A il preprocessore ti cambiera' tale stringa nella define
facendoti cambiare tutta la struttura del tuo codice (capisco benissimo che
potrebbe anche dare errore poi in compilazione, ma non si sa mai ...) quindi
per me l'uso dell' _ come primo carattere ha un grosso peso come pericoli di
compilazione e bug derivanti.
cmq ho capito benissimo la tua spiegazione come semplicita' di uso di tali
valori quando ci serve una copia senza dover rinominare la variabile.
ciao e grazie

 ha scritto nel messaggio
news:bgjln6$hf7$1...@newsreader.mailgate.org...

cosa e' 17.4.3.1.2 ???
quindi liberissimi di usarli come parametri di funzioni giusto ???
ciao e grazie

 
Sě. Anche come nomi di membri dati, metodi e variabili locali.
Max

 valori quando ci serve una copia senza dover rinominare la variabile.
Pensa a questo:
        class MiaClasse {
        public:
                MiaClasse( int _qualcosa ) : qualcosa_( _qualcosa ) {
                        int qualcosa( _qualcosa );
                        ...
                        if ( qualcosa )
                                qualcosa_ = _qualcosa * 2;
                }
        private:
                int     qualcosa_;
        }
Do you like it? ;-)


 utilizzare nomi diversi per indicare delle copie dei parametri. Esempio:
Perché allora non qualcosa_ invece di _qualcosa?
-- 
Marco Barisione
http://spazioinwind.libero.it/marcobari/

 ([17.4.3.1.2])
Non mi ricordavo piů tutta questa storia, ma scegliere regole un po' piů
facili no?


 Riferimento al testo dello Standard.
mi riesci a dare l'indicazione dove trovare il testo dello standard che su
google sono un sacco di siti che parlano dei problemi, e discussioni varie
...
lo chiedo perche' ora vado a letto lo cerchero' domani sera e magari se hai
tempo e cel'hai sotto mano melo dai prima tu, se no lo cerco domani sera.
ciao

 Do you like it? ;-)
bello diventa divertente mantenerle poi 1000 righe di codice scritte cosi
:-p

 :-p
A parte il fatto che metodi da 1000 righe di codice per me significano 
pessima progettazione (;-)), comunque guarda questo codice preso dalla vita 
reale:
template <class T>
class Singleton {
public:
        ...
        Singleton( T * _instance = NULL ) : instance_( _instance ) {
                if ( ! _instance )
                        instance_ = new T;
        }
        ...
private:
        T       * instance_;
 
};
Con un codice del genere, è chiarissimo che "instance" rappresenta un 
puntatore all'istanza. Quale? La notazione prefissa (_instance) si 
riferisce a quella passata come parametro, la notazione suffissa 
(instance_) a quella definitiva che sopravviverà insieme all'istanza della 
classe.
Se dopo avessi bisogno di fare una copia per altri scopi (per esempio memory 
management automatico con garbage collection), mi basterebbe manutenere il 
codice in questo modo:
#include <something_about_garbage_collection.h>
...
template <class T>
class Singleton {
public:
        ...
        Singleton( T * _instance = NULL ) : instance_( _instance ) {
                T instance( _instance );
                if ( ! instance )
                        instance = new T;
                instance_ = instance;
                garbage_collector< T >::manage( instance );
        }
        ...
private:
        T       * instance_;
 
};
Nota come la notazione che uso permetta di minimizzare il numero di righe di 
codice per esprimere la stessa cosa, minimizzando la complessità 
ciclomatica del codice, e quindi il costo di verifica della correttezza.
Ciao!
-- 
P.S. Ovviamente, tutto questo andrebbe inserito in un contesto di test 
automatizzati and so on, ma era solo per spiegare che non è poi così 
difficile manutenere questo codice.... anzi... :)


 Perché allora non qualcosa_ invece di _qualcosa?
Perché, nella mia convenzione, "qualcosa_" è un membro di una classe.


 ...
Il testo dello Standard lo acquisti per 18 dollari al sito dell'ANSI.
 
http://webstore.ansi.org/ansidocstore/find.asp
Sul sito del Working Group:
 
http://std.dkuug.dk/JTC1/SC22/WG21/
puoi, invece, trovare i vari working paper precedenti alla stesura dello
Standard
definitivo.
Max

 quindi liberissimi di usarli come parametri di funzioni giusto ???
Liberi si, che poi si tratti di buon senso e' opinabile. A me la
convenzione di Azathot non piace perche' non c'e' sufficiente
differenza visiva tra le convenzioni per i membri, i parametri e le
variabili libere.
Ciao,
Nicola

 facili no?
Si sarebbe potuto forse fare se non fosse stato necessario cercare di
accomodare 10-20 anni di pregresso.
Ciao,
Nicola
P.S. Guido si che ha la vita facile :-)

        }
andando a modificare la classe? bella idea, complimenti, un genio.
!google The Open-Closed Principle
aspetto ancora delucidazioni sul perchè "usando l'idioma pimpl non sia
possibile derivare banalmente" , tua affermazione su questo ng, mai
motivata, del 15-05-2003 nel thread "eccezioni in distruttore", 
giusto per ridere ancora un pò.
sbirish.

 giusto per ridere ancora un pò.
Puoi far riferimento al testo di Scott Meyers, "Effective C++", per una 
spiegazione più chiara della problematica. Personalmente, non ho il tempo 
di spiegare l'ovvio.
-- 


Personalmente, non ho il tempo di spiegare l'ovvio.
Ovvio per chi? non esiste alcuna problematica simile a quella che hai
_inventato_. La domanda era giusto per curiosità, tanto per vedere
quanto riesci a renderti ridicolo.
sbirish.

 _inventato_. 
I libri vanno letti, non sono status symbols.


I libri vanno letti, non sono status symbols.
finito di colorare l'ultimo che hai comprato?
sbirish.

Non ho intenzione di entrare a far parte della discussione....
Voglio solo chiedere di evitare di usare termini offensivi, ad entrambi e a
tutti gli altri del NG che abbiano intenzione di usarli
Tommy