Visual C++ & fstream (STL/iostream)
Χρειάστηκε για πρώτη φορά να ασχοληθώ με C++ streams (STL, όχι iostream) για να κάνω αλλαγές σε κώδικα και τα έχασα... η βλαμένη Visual C++ (ναι, μιλάμε για Visual Studio 6.0) έχει πρόβλημα με το code completion (ή όπως το λένε) και ενώ χρησιμοποιείς κλάσεις της STL, το code completion δίνει τα χαρακτηριστικά των κλάσεων της iostream. Τέλεια! Έχεις ένα ofstream και σου δίνει την εντύπωση ότι μπορείς να κάνεις open με protection flag. Χα! Κούνια που σε κούναγε.
Το μεγαλύτερο πρόβλημά μου ήταν ότι δεν είχα ιδέα ότι υπάρχουν δύο βιβλιοθήκες για streams (δηλαδή υπήρχαν, γιατί όλες οι C++ βιβλιοθήκες που είναι έστω και λίγο πιο καινούριες από τη VCPP6 δεν έχουν τα παλιά iostream ούτε για λόγους συμβατότητας) . Φυσικά, δεν μπορείς να το καταλάβεις αυτό από το MSDN λόγω του κρυπτογραφικού συστήματος που χρησιμοποιούν (το MSDN χρησιμεύει μόνο για να θυμηθείς κάτι που ξέρεις ή να βρεις κάποια λύση σε κάποιο από τα πολλά γνωστά προβλήματα που καλύπτει η knowledge base της Microsoft). Γι' αυτό ούτε η Microsoft δεν μπορεί να ντοκουμεντάρει κανένα API για την κομισιόν.
Το απόσταγμα:
- Χρησιμοποιήστε stdio (#include <stdio.h>) ή fstream (#include <fstream>), και όχι iostream (#include <fstream.h>). Προσοχή στη διαφορά των includes!
- Η STL δεν υποστηρίζει locking/sharing!
(Ευτυχώς τα σημεία του κώδικα που χρησιμοποιούσαν τα streams ήταν λίγα, οπότε η αλλαγή σε stdio ήταν εύκολη.)
Σχόλια