Newsgroup: it.comp.lang.c++
Titolo: ANSI C++ e vecchie funzioni

Salve a tutti. La mia domanda è semplice: lo standard ANSI C++ prevede
l'utilizzo delle più vecchie funzioni C dichiarate nei vari header <cstdio>,
<ctime>, ecc., oppure queste sono fornite solo per garantire la
backward-compatibility?
Ad esempio, se voglio scrivere una classe (in codice full-ANSI C++) derivata
da basic_streambuf per implementare uno stream buffer alternativo a
basic_filebuf sulla gestione dei file, posso utilizzare, nei metodi di
questa classe, le funzioni di accesso ai file (tipo fopen() e compagnia
bella) dichiarate <cstdio> ?
Grazie a tutti,
    Marco

> Salve a tutti. La mia domanda è semplice: lo standard ANSI C++ prevede
Il C++ Standard è ISO/IEC 14882
Per quel che riguarda il tuo questito, io *credo* che la risposta sia:
si, puoi; ma non so quanto abbia senso farlo.
--
Gerolamo

backward-compatibility?
Non solo, la libreria standard del C e' vista piu' come una
eredita', che non come un'appendice di compatibilita'.
Anche se viene raccomandato l'uso delle std::string quando
possibile, l'uso delle stringhe C puo' consente di scrivere
codice molto efficiente.
-- 
Andrea Laforgia
#exclude <windows.h>

 bella) dichiarate <cstdio> ?
Puoi. Ma non credo che abbia olto senso. Lo streambuf č un buffer. Le
funzioni stile fopen e company sono loro stesso bufferizzate. Quindi di
fatto ottieni ... una inutile doppia bufferizzazione.
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 fatto ottieni ... una inutile doppia bufferizzazione.
Beh, mi risulta che basic_filebuf<> utilizzi proprio fopen() e le altre
relative funzioni di gestione dei file, almeno č cosě nell'implementazione
della STL in mio possesso. Inoltre, il comportamento di default della classe
basic_streambuf<> č di non effettuare nessun buffering  (sputc() chiama
direttamente il membro protetto overflow()).
Il mio scopo č creare una classe di gestione dei file compatibile con
basic_filebuf (in modo da poterla associare ad un basic_ostream<> e poterla
utilizzare quindi in tutte le operazioni su stream), ma diversa da essa in
alcune operazioni.
Siccome devo costruire in pratica un "sostituto" di basic_filebuf<> da
utilizzare in certe situazioni, mi sembrava piů corretto implementare
l'accesso ai file all'interno della mia classe senza ricorrere ad un oggetto
basic_filebuf<> (ci sarebbe un overhead inutile e, IMHO, sarebbe logicamente
scorretto).
Marco

 backward-compatibility?
Nel draft di novembre '97 ho trovato:
17.8:
8 This  library  also  makes  available the facilities of the Standard C
  library, suitably adjusted to ensure static type safety.
[...]
E poi
17.4.1.2.3:
3 The facilities of the Standard C Library are provided in 18 additional
  headers, as shown in Table 3:
              Table 3--C++ Headers for C Library Facilities
           +--------------------------------------------------+
           |<cassert> <ciso646> <csetjmp> <cstdio>  <ctime>   |
           |<cctype>  <climits> <csignal> <cstdlib> <cwchar>  |
           |<cerrno>  <clocale> <cstdarg> <cstring> <cwctype> |
           |<cfloat>  <cmath>   <cstddef>                     |
           +--------------------------------------------------+
In effetti non è molto esplicito...