# C++ dalam Maguyva: graf kelas dan panggilan untuk pangkalan kod besar

Canonical source: https://maguyva.ai/ms/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 menyokong C++ dengan AST, simbol dan graf, supaya ejen AI boleh menjejak kelas, ruang nama, penggantian maya dan pemanggil dalam pangkalan kod C++ yang besar.

## Gambaran sokongan

- Peringkat: Sokongan AST dan simbol
- Pengaturcaraan
- Sambungan fail: .c, .c++, .cc, .cpp, .cxx, .h, +4 lagi
- Penghuraian AST sebenar untuk carian sedar-sintaks dan konteks struktur.
- Simbol bernama menyokong carian semantik dan rujukan silang. Navigasi graf tersedia apabila pengekstrakan hubungan didayakan.
- Bahasa ini menyumbang simbol dan hubungan kepada carian berasaskan graf; jenis edge yang disokong berbeza mengikut binaan aslinya.
- Penghuraian AST dan pengekstrakan simbol kedua-duanya tersedia.

## Paling sesuai

- Enjin permainan, sistem dagangan, pelayar dan pangkalan kod C++ besar yang lain, tempat perubahan satu pengepala membina semula separuh pepohon.
- Hierarki kelas dengan kaedah maya, tempat kaedah yang berjalan ditakrifkan di tempat lain daripada tempat ia dipanggil.
- Pemfaktoran semula dibantu ejen yang memerlukan pemanggil dan penggantian sebelum tandatangan berubah.

## Aliran kerja ejen

- Mencari setiap penggantian sesuatu kaedah maya sebelum kelas asas berubah.
- Menyenaraikan pemanggil fungsi atau kaedah kelas beruang nama, seperti `net::Socket::send`, di seluruh pangkalan kod.
- Menjejak tempat sesuatu kelas dicipta dengan `new` dan ahli yang disentuhnya selepas itu.

## Mengapa C++ memerlukan struktur, bukan carian teks

Dalam C++, nama tidak unik. `send` boleh jadi fungsi bebas, ahli tiga kelas dan penggantian dalam kelas keempat. Ruang nama, templat dan definisi di luar kelas, seperti `Socket::send` dalam fail `.cpp`, memecahkan satu jenis ke banyak fail. Carian teks mengembalikan setiap padanan, tetapi tidak memberitahu ejen yang mana dicapai oleh sesuatu panggilan.

Maguyva mengindeks kelas, ahli dan panggilan bersama pemiliknya, supaya ejen mengikuti struktur sebenar sebelum menyunting.

## Apa yang diekstrak oleh Maguyva daripada C++

Maguyva meliputi sambungan fail sumber dan pengepala C++ yang biasa, termasuk `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh` dan `.hxx`. Kelas, struct dan fungsi diekstrak, dan definisi di luar kelas seperti `void Socket::send()` dikaitkan dengan kelas pemilik dan ruang namanya. Ahli maya direkodkan, dan parameter templat menjadi sebahagian daripada tandatangan.

Penentuan jenis penerima mengikut parameter, pengisytiharan setempat, medan, gelung `for` berasaskan julat dan `auto`, serta melihat ke dalam `unique_ptr`, `shared_ptr` dan `optional`, jadi panggilan seperti `conn->send()` diselesaikan kepada kelas yang betul. Klausa kelas asas mengisi pewarisan, dan ungkapan `new` dikira sebagai penginstansian.

Penopengan makro eksport dan anotasi yang sama seperti C turut digunakan. Kira-kira 273 nama pustaka standard (`std::cout`, `std::endl`, `printf` dan seumpamanya) ditapis daripada hubungan. Graf merekodkan panggilan, include, pewarisan, penggantian, penginstansian, rujukan jenis, bacaan dan tulisan, serta tepi `throw`.

## Contoh gesaan ejen

- "Kelas mana yang menggantikan `Renderer::draw`, dan siapa yang memanggilnya?" (`dependency_search`)
- "Tunjukkan `OrderBook::match` dan setiap pemanggilnya." (`find_symbol`)
- "Terangkan cara mesej data pasaran sampai ke enjin strategi." (`get_task_context`)

## Had yang diketahui

- `.h` muncul dalam senarai sambungan C, C++ dan Objective-C, jadi dalam pepohon yang mencampurkan C dan C++, pengepala dibahagikan antara profil-profil ini.
- Badan makro seperti objek tidak dihuraikan, dan panggilan kepada nama pustaka standard yang ditapis bukan tepi graf. Gunakan `text_pattern_search` untuk makro dan penggunaan `std::`.

## Langkah seterusnya

Sambungkan repositori dengan [panduan permulaan pantas](/ms/docs/quickstart), kemudian semak matriks sokongan di [halaman keserasian](/ms/docs/compatibility). Jika sebahagian pepohon ialah C tulen, baca juga [panduan C](/ms/languages/c).

## Butiran enjin

- Definisi di luar kelas seperti `void Socket::send()` dikaitkan dengan kelas pemilik dan ruang namanya, dan ahli maya direkodkan.
- Penentuan jenis penerima mengikut parameter, pemboleh ubah setempat, medan, `for` berasaskan julat dan `auto`, serta melihat ke dalam `unique_ptr`, `shared_ptr` dan `optional`.
- Klausa kelas asas mengisi pewarisan, ungkapan `new` dikira sebagai penginstansian, dan kira-kira 273 nama pustaka standard ditapis daripada hubungan.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan dengan nama yang dilayakkan sepenuhnya seperti `OrderBook::match` apabila anda memerlukan definisi dan pemanggil.
- `dependency_search`: Sebelum tandatangan berubah, gunakan pada kelas asas atau kaedah maya untuk mencari penggantian dan pemanggil.
- `get_task_context`: Gunakan untuk gesaan seperti “terangkan cara mesej data pasaran sampai ke enjin strategi”.
