# C++ dans Maguyva : graphes de classes et d'appels pour grands projets

Canonical source: https://maguyva.ai/fr/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 prend en charge C++ avec AST, symboles et graphe, pour que les agents IA suivent classes, namespaces, redéfinitions virtuelles et appelants dans de grandes bases C++.

## Aperçu du support

- Palier: Prise en charge de l’AST et des symboles
- Programmation
- Extensions: .c, .c++, .cc, .cpp, .cxx, .h, +4 de plus
- Analyse AST réelle pour une recherche consciente de la syntaxe et un contexte structurel.
- Les symboles nommés alimentent la recherche sémantique et le référencement croisé. La navigation par graphe est disponible lorsque l’extraction de relations est activée.
- Ce langage fournit des symboles et des relations à la recherche tenant compte du graphe ; les types d’arêtes pris en charge varient selon ses constructions natives.
- L’analyse AST et l’extraction de symboles sont toutes deux disponibles.

## Idéal pour

- Moteurs de jeu, systèmes de trading, navigateurs et autres grandes bases C++ où modifier un en-tête recompile la moitié de l'arbre.
- Les hiérarchies de classes à méthodes virtuelles, où la méthode exécutée est définie ailleurs qu'à l'endroit de l'appel.
- Les refactorings assistés par agent qui ont besoin des appelants et des redéfinitions avant un changement de signature.

## Workflows d'agent

- Trouver toutes les redéfinitions d'une méthode virtuelle avant de modifier la classe de base.
- Lister dans toute la base de code les appelants d'une fonction ou méthode de classe avec namespace, comme `net::Socket::send`.
- Retracer où une classe est construite avec `new` et quels membres elle touche ensuite.

## Pourquoi C++ demande de la structure, pas de la recherche textuelle

En C++, les noms ne sont pas uniques. `send` peut être une fonction libre, un membre de trois classes et une redéfinition dans une quatrième. Les namespaces, les templates et les définitions hors classe comme `Socket::send` dans un fichier `.cpp` répartissent un type sur de nombreux fichiers. La recherche textuelle renvoie toutes les correspondances ; elle ne dit pas à un agent laquelle un appel atteint.

Maguyva indexe classes, membres et appels avec leurs propriétaires, pour qu'un agent suive la vraie structure avant de modifier quoi que ce soit.

## Ce que Maguyva extrait en C++

Maguyva couvre les extensions courantes de sources et d'en-têtes C++, dont `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh` et `.hxx`. Les classes, structs et fonctions sont extraites, et une définition hors classe comme `void Socket::send()` est rattachée à sa classe et à son namespace propriétaires. Les membres virtuels sont enregistrés, et les paramètres de template font partie des signatures.

Le typage des receveurs suit les paramètres, les déclarations locales, les champs, les boucles `for` sur intervalle et `auto`, et voit à travers `unique_ptr`, `shared_ptr` et `optional`, si bien qu'un appel comme `conn->send()` peut se résoudre vers la bonne classe. Les clauses de classe de base alimentent l'héritage, et les expressions `new` comptent comme instanciation.

Le même masquage des macros d'export et d'annotation qu'en C s'applique. Environ 273 noms de la bibliothèque standard (`std::cout`, `std::endl`, `printf` et similaires) sont filtrés des relations. Le graphe enregistre les appels, les includes, l'héritage, les redéfinitions, l'instanciation, les références de type, les lectures et écritures, et les arêtes `throw`.

## Exemples de prompts pour agents

- « Quelles classes redéfinissent `Renderer::draw`, et qui l'appelle ? » (`dependency_search`)
- « Montre-moi `OrderBook::match` et tous ses appelants. » (`find_symbol`)
- « Explique comment un message de données de marché atteint le moteur de stratégie. » (`get_task_context`)

## Limites connues

- `.h` figure dans les listes d'extensions de C, C++ et Objective-C ; dans les arbres mêlant C et C++, les en-têtes sont donc partagés entre ces profils.
- Le corps des macros de type objet n'est pas analysé, et les appels aux noms filtrés de la bibliothèque standard ne sont pas des arêtes du graphe. Utilisez `text_pattern_search` pour les macros et les usages de `std::`.

## Étapes suivantes

Connectez un dépôt avec le [démarrage rapide](/fr/docs/quickstart), puis consultez la matrice de prise en charge sur la [page de compatibilité](/fr/docs/compatibility). Si une partie de l'arbre est en C pur, lisez aussi le [guide C](/fr/languages/c).

## Détails du moteur

- Les définitions hors classe comme `void Socket::send()` sont rattachées à leur classe et à leur namespace propriétaires, et les membres virtuels sont enregistrés.
- Le typage des receveurs suit les paramètres, les variables locales, les champs, les `for` sur intervalle et `auto`, et voit à travers `unique_ptr`, `shared_ptr` et `optional`.
- Les clauses de classe de base alimentent l'héritage, les expressions `new` comptent comme instanciation, et environ 273 noms de la bibliothèque standard sont filtrés des relations.

## Points d'entrée MCP utiles

- `find_symbol`: Utilisez-le pour un nom qualifié comme `OrderBook::match` quand vous avez besoin de la définition et des appelants.
- `dependency_search`: Utilisez-le sur une classe de base ou une méthode virtuelle pour trouver surcharges et appelants avant un changement de signature.
- `get_task_context`: Utilisez-le pour des prompts comme « explique comment un message de données de marché atteint le moteur de stratégie ».
