Αυτό το άρθρο τροποποιήθηκε τελευταία φορά από το χρήστη Summer στις 2019-1-16 09:31
1. Ποιο είναι το τεχνικό πρόβλημα που πρέπει να λυθεί σε αυτό το άρθρο;
Λύστε το πρόβλημα στην προηγούμενη τεχνική ότι κατά την ανάλυση εγγράφων XML σε γλώσσα C++, οι ετικέτες βασικής κλάσης που προέρχονται από δεδομένα κλάσης που εμφανίζονται στο αρχικό έγγραφο XML μπορούν να αναλύσουν μόνο τα δεδομένα βασικής κλάσης σύμφωνα με τον τύπο βασικής κλάσης σύμφωνα με τη συμβατική μέθοδο ανάλυσης, αλλά δεν μπορούν να αναλύσουν πλήρως τα παραγόμενα δεδομένα κλάσης.
2. Τεχνικό πλαίσιο
Στην προηγούμενη τεχνική, χρησιμοποιήστε το boost::serialization για να μεταφέρετε παράγωγες με δείκτη βασικής κλάσης ή χρησιμοποιήστε BOOST_CLASS_EXPORT μακροεντολή.
Και τα δύο παραπάνω σχήματα στις υπάρχουσες τεχνολογίες βασίζονται στον μηχανισμό αφηρημένης κλάσης, αλλά επειδή οι αφηρημένες δεν μπορούν να δημιουργηθούν ως συγκεκριμένα αντικείμενα που μπορούν να χρησιμοποιηθούν, τα αντικείμενα που δηλώνονται ως βασικές σε έγγραφα XML δεν μπορούν να αναλυθούν. Η παρούσα εφεύρεση έχει σκοπό να διασφαλίσει ότι τα δεδομένα τόσο του ίδιου του αντικειμένου βασικής κλάσης όσο και του παραγόμενου αντικειμένου κλάσης που επισημαίνεται από το αντικείμενο βασικής κλάσης μπορούν να αναλυθούν σωστά και να διατηρηθούν πλήρως.
3. Το τεχνικό καθεστώς που προβλέπεται στο παρόν άρθρο
Αυτή η εργασία δεν χρησιμοποιεί τον μηχανισμό αφηρημένης κλάσης, αλλά εισάγει τον δείκτη βασικής κλάσης στην κλάση που καλείται από τη βασική κλάση, δηλώνει τη συνάρτηση ανάλυσης βασικής κλάσης ως εικονική συνάρτηση και καλεί τη συνάρτηση ανάλυσης μέσω του δείκτη βασικής κλάσης στη διαδικασία ανάλυσης, έτσι ώστε να εφαρμοστεί πολυμορφισμός για δυναμική ανάλυση και αποθήκευση των δεδομένων και, τέλος, διασφαλίζει ότι τα δεδομένα τόσο του αντικειμένου βασικής κλάσης όσο και του παραγόμενου αντικειμένου κλάσης που προέρχεται από τη βασική κλάση μπορούν να αποθηκευτούν στον δείκτη που ορίζεται από τη βασική κλάση. Συγκεκριμένα βήματα: Βήμα 1: Κώδικας C++ για να σχεδιάσετε όλες τις που μπορούν να αντιστοιχούν στις ετικέτες δεδομένων στο έγγραφο XML που πρόκειται να αναλυθεί και να αναλύσετε τα δεδομένα XML ένα προς ένα από τις ετικέτες ανώτατου επιπέδου. Βήμα 2: Για κάθε ετικέτα που αναλύεται, προσδιορίστε εάν υπάρχουν άλλες ετικέτες που κληρονομούν την ετικέτα ως βασική κλάση, δηλαδή εάν ο τύπος ετικέτας προέρχεται από άλλους τύπους ετικετών. Βήμα 3: Εάν διαπιστωθεί ότι η τρέχουσα ετικέτα δεν κληρονομείται ως βασική κλάση, αναλύστε την τρέχουσα ετικέτα σύμφωνα με τα κανονικά βήματα ανάλυσης. Βήμα 4: Εάν διαπιστωθεί ότι η τρέχουσα ετικέτα κληρονομείται ως βασική κλάση, προσδιορίστε περαιτέρω εάν το περιεχόμενο που περιγράφεται από την ετικέτα βασικής κλάσης είναι υποδεέστερο του αντικειμένου βασικής κλάσης ή ενός παράγωγου αντικειμένου κλάσης. Βήμα 5: Εάν το περιεχόμενο της τρέχουσας ετικέτας βασικής κλάσης έχει καθοριστεί για να περιγράψει το αντικείμενο βασικής κλάσης, αναλύστε την τρέχουσα ετικέτα σύμφωνα με τα κανονικά βήματα. Βήμα 6: Εάν το περιεχόμενο της τρέχουσας ετικέτας βασικής κλάσης περιγράφει το παράγωγο αντικείμενο κλάσης, τροποποιήστε τον κώδικα για ανάλυση σύμφωνα με τη νέα μέθοδο ανάλυσης: τροποποιήστε τη δομή δεδομένων του προηγούμενου τύπου που ορίζει το αντικείμενο βασικής κλάσης και ορίστε τον δείκτη βασικής κλάσης. Τροποποιήστε τη συνάρτηση ανάλυσης βασικής κλάσης και δηλώστε την ως εικονική συνάρτηση. Βήμα 7: Όπου το αντικείμενο βασικής κλάσης ορίστηκε αρχικά για ανάλυση, ορίζεται ο δείκτης βασικής κλάσης και ο συγκεκριμένος τύπος μνήμης εκχωρείται σε αυτό σύμφωνα με τον τύπο που περιγράφεται από το περιεχόμενο της ετικέτας και ο δείκτης βασικής κλάσης χρησιμοποιείται για την κλήση της συνάρτησης ανάλυσης για την ανάλυση της τρέχουσας ετικέτας. Βήμα 8: Αναλύστε και παίξτε την τρέχουσα ετικέτα για να προσδιορίσετε εάν υπάρχουν ακόμα ετικέτες προς ανάλυση. Βήμα 9: Εάν διαπιστωθεί ότι δεν υπάρχουν ετικέτες προς ανάλυση, σημαίνει ότι η ανάλυση έχει ολοκληρωθεί και τα δεδομένα έχουν αποθηκευτεί στην κλάση με την υψηλότερη ετικέτα του αντίστοιχου εγγράφου XML στην κλάση C++. Βήμα 10: Εάν διαπιστωθεί ότι εξακολουθούν να υπάρχουν ετικέτες που δεν έχουν επιλυθεί, αναλύστε την επόμενη ετικέτα σύμφωνα με το βήμα 2.
Επισυνάπτεται διάγραμμα ροής
4. Σύνοψη
Η C++ εισάγει έναν δείκτη βασικής κλάσης για την αντιστοίχιση αντικειμένων του αντίστοιχου τύπου στο περιεχόμενο του tag XML ανάλογα με το αν πρόκειται για βασική κλάση ή για παράγωγη κλάση και χρησιμοποιεί τον καθορισμένο δείκτη βασικής κλάσης για να καλέσει μια συνάρτηση ανάλυσης που έχει δηλωθεί ως φανταστική συνάρτηση για την ανάλυση του περιεχομένου του tag βασικής κλάσης XML. Με αυτόν τον τρόπο, όταν η ετικέτα βασικής κλάσης XML περιγράφει τα δεδομένα αντικειμένου βασικής κλάσης, η συνάρτηση ανάλυσης βασικής κλάσης θα καλείται δυναμικά σύμφωνα με τον πολυμορφισμό της C++ και τα δεδομένα βασικής κλάσης που περιγράφονται από την ετικέτα βασικής κλάσης μπορούν να αναλυθούν και να διατηρηθούν σωστά. Όταν η ετικέτα βασικής κλάσης XML περιγράφει τα παραγόμενα δεδομένα αντικειμένου κλάσης, η συνάρτηση ανάλυσης παράγωγης κλάσης θα καλείται δυναμικά σύμφωνα με τον πολυμορφισμό της C++ και τα παραγόμενα δεδομένα κλάσης που περιγράφονται από την ετικέτα βασικής κλάσης μπορούν επίσης να αναλυθούν και να διατηρηθούν σωστά.
|