# C++ στο Maguyva: γράφοι κλάσεων και κλήσεων για μεγάλες βάσεις κώδικα

Canonical source: https://maguyva.ai/el/languages/cpp

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Το Maguyva υποστηρίζει C++ με AST, σύμβολα και γράφο, ώστε οι πράκτορες AI να παρακολουθούν κλάσεις, χώρους ονομάτων, εικονικές επικαλύψεις και καλούντες σε μεγάλες βάσεις κώδικα C++.

## Στιγμιότυπο υποστήριξης

- Επίπεδο: Υποστήριξη AST και συμβόλων
- Προγραμματισμός
- Επεκτάσεις: .c, .c++, .cc, .cpp, .cxx, .h, +4 ακόμα
- Πραγματική ανάλυση AST για αναζήτηση με επίγνωση σύνταξης και δομικό πλαίσιο.
- Τα επώνυμα σύμβολα τροφοδοτούν τη σημασιολογική αναζήτηση και τη διασταύρωση αναφορών. Η πλοήγηση στον γράφο είναι διαθέσιμη όταν είναι ενεργοποιημένη η εξαγωγή σχέσεων.
- Αυτή η γλώσσα συνεισφέρει σύμβολα και σχέσεις στην αναζήτηση με επίγνωση του γράφου· οι υποστηριζόμενοι τύποι ακμών διαφέρουν ανάλογα με τις εγγενείς δομές της.
- Διατίθενται τόσο ανάλυση AST όσο και εξαγωγή συμβόλων.

## Ιδανική χρήση

- Μηχανές παιχνιδιών, συστήματα συναλλαγών, προγράμματα περιήγησης και άλλες μεγάλες βάσεις κώδικα C++, όπου η αλλαγή μιας κεφαλίδας ξαναχτίζει το μισό δέντρο.
- Ιεραρχίες κλάσεων με εικονικές μεθόδους, όπου η μέθοδος που εκτελείται ορίζεται αλλού από εκεί όπου καλείται.
- Αναδιάρθρωση με υποστήριξη πρακτόρων, που χρειάζεται καλούντες και επικαλύψεις πριν από μια αλλαγή υπογραφής.

## Ροές εργασίας πρακτόρων

- Εύρεση κάθε επικάλυψης μιας εικονικής μεθόδου πριν αλλάξει η βασική κλάση.
- Καταγραφή σε όλη τη βάση κώδικα όσων καλούν μια συνάρτηση ή μέθοδο κλάσης με namespace, όπως `net::Socket::send`.
- Εντοπισμός του σημείου όπου μια κλάση δημιουργείται με `new` και των μελών που αγγίζει στη συνέχεια.

## Γιατί η C++ χρειάζεται δομή και όχι αναζήτηση κειμένου

Στη C++ τα ονόματα δεν είναι μοναδικά. Το `send` μπορεί να είναι ελεύθερη συνάρτηση, μέλος τριών κλάσεων και επικάλυψη σε μια τέταρτη. Οι χώροι ονομάτων, τα πρότυπα και οι ορισμοί εκτός κλάσης, όπως το `Socket::send` σε ένα αρχείο `.cpp`, μοιράζουν έναν τύπο σε πολλά αρχεία. Η αναζήτηση κειμένου επιστρέφει κάθε αντιστοιχία, αλλά δεν λέει στον πράκτορα σε ποια καταλήγει μια κλήση.

Το Maguyva ευρετηριάζει κλάσεις, μέλη και κλήσεις μαζί με τους κατόχους τους, ώστε ένας πράκτορας να ακολουθεί την πραγματική δομή πριν επεξεργαστεί.

## Τι εξάγει το Maguyva από τη C++

Το Maguyva καλύπτει τις συνηθισμένες επεκτάσεις αρχείων πηγαίου κώδικα και κεφαλίδων της C++, μεταξύ των οποίων `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh` και `.hxx`. Εξάγονται κλάσεις, structs και συναρτήσεις, και ένας ορισμός εκτός κλάσης όπως το `void Socket::send()` αποδίδεται στην κλάση-κάτοχο και στο namespace της. Τα εικονικά μέλη καταγράφονται και οι παράμετροι προτύπων αποτελούν μέρος των υπογραφών.

Η τυποποίηση δεκτών ακολουθεί παραμέτρους, τοπικές δηλώσεις, πεδία, βρόχους `for` εύρους και το `auto`, και βλέπει μέσα από `unique_ptr`, `shared_ptr` και `optional`, ώστε μια κλήση όπως `conn->send()` να επιλύεται στη σωστή κλάση. Οι προτάσεις βασικών κλάσεων τροφοδοτούν την κληρονομικότητα και οι εκφράσεις `new` μετρούν ως δημιουργία στιγμιοτύπου.

Ισχύει η ίδια κάλυψη μακροεντολών εξαγωγής και επισημείωσης με τη C. Περίπου 273 ονόματα της τυπικής βιβλιοθήκης (`std::cout`, `std::endl`, `printf` και παρόμοια) φιλτράρονται από τις σχέσεις. Ο γράφος καταγράφει κλήσεις, συμπεριλήψεις, κληρονομικότητα, επικαλύψεις, δημιουργία στιγμιοτύπων, αναφορές τύπων, αναγνώσεις και εγγραφές, καθώς και ακμές `throw`.

## Παραδείγματα προτροπών για πράκτορες

- «Ποιες κλάσεις επικαλύπτουν το `Renderer::draw` και ποιος το καλεί;» (`dependency_search`)
- «Δείξε μου το `OrderBook::match` και όλους όσους το καλούν.» (`find_symbol`)
- «Εξήγησε πώς ένα μήνυμα δεδομένων αγοράς φτάνει στη μηχανή στρατηγικής.» (`get_task_context`)

## Γνωστοί περιορισμοί

- Το `.h` εμφανίζεται στις λίστες επεκτάσεων της C, της C++ και της Objective-C, οπότε σε δέντρα που αναμειγνύουν C και C++ οι κεφαλίδες μοιράζονται ανάμεσα σε αυτά τα προφίλ.
- Τα σώματα των μακροεντολών τύπου αντικειμένου δεν αναλύονται, και οι κλήσεις σε φιλτραρισμένα ονόματα της τυπικής βιβλιοθήκης δεν είναι ακμές του γράφου. Για μακροεντολές και χρήσεις του `std::` χρησιμοποιήστε το `text_pattern_search`.

## Επόμενα βήματα

Συνδέστε ένα αποθετήριο με τον [γρήγορο οδηγό εκκίνησης](/el/docs/quickstart) και έπειτα δείτε τον πίνακα υποστήριξης στη [σελίδα συμβατότητας](/el/docs/compatibility). Αν μέρος του δέντρου είναι καθαρή C, διαβάστε και τον [οδηγό για τη C](/el/languages/c).

## Λεπτομέρειες μηχανής

- Οι ορισμοί εκτός κλάσης, όπως το `void Socket::send()`, αποδίδονται στην κλάση-κάτοχο και στο namespace τους, και τα εικονικά μέλη καταγράφονται.
- Η τυποποίηση δεκτών ακολουθεί παραμέτρους, τοπικές μεταβλητές, πεδία, `for` εύρους και `auto`, και βλέπει μέσα από `unique_ptr`, `shared_ptr` και `optional`.
- Οι προτάσεις βασικών κλάσεων τροφοδοτούν την κληρονομικότητα, οι εκφράσεις `new` μετρούν ως δημιουργία στιγμιοτύπου και περίπου 273 ονόματα της τυπικής βιβλιοθήκης φιλτράρονται από τις σχέσεις.

## Χρήσιμα σημεία εισόδου MCP

- `find_symbol`: Χρησιμοποιήστε το με ένα πλήρως προσδιορισμένο όνομα όπως `OrderBook::match` όταν χρειάζεστε τον ορισμό και τους καλούντες.
- `dependency_search`: Πριν από μια αλλαγή υπογραφής, χρησιμοποιήστε το σε μια βασική κλάση ή εικονική μέθοδο για να βρείτε επικαλύψεις και καλούντες.
- `get_task_context`: Χρησιμοποιήστε το για προτροπές όπως «εξήγησε πώς ένα μήνυμα δεδομένων αγοράς φτάνει στη μηχανή στρατηγικής».
