# C++ in Maguyva: klassen- en aanroepgrafen voor grote codebases

Canonical source: https://maguyva.ai/nl/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 ondersteunt C++ met AST, symbolen en graaf, zodat AI-agents klassen, namespaces, virtuele overrides en aanroepers volgen in grote C++-codebases.

## Ondersteuningsoverzicht

- Tier: AST- en symboolondersteuning
- Programmeren
- Extensies: .c, .c++, .cc, .cpp, .cxx, .h, +4 meer
- Echte AST-parsing voor syntaxbewust zoeken en structurele context.
- Benoemde symbolen voeden semantische lookup en kruisverwijzingen. Graafnavigatie is beschikbaar wanneer relatie-extractie is ingeschakeld.
- Deze taal draagt symbolen en relaties bij aan graafbewust zoeken; ondersteunde kanttypen variëren met de eigen constructies van de taal.
- Zowel AST-parsing als symboolextractie zijn beschikbaar.

## Beste toepassing

- Game-engines, handelssystemen, browsers en andere grote C++-codebases waarin één headerwijziging de halve boom opnieuw bouwt.
- Klassenhiërarchieën met virtuele methoden, waarbij de methode die draait ergens anders is gedefinieerd dan waar ze wordt aangeroepen.
- Door agents ondersteunde refactoring die aanroepers en overrides nodig heeft vóór een signatuurwijziging.

## Agentworkflows

- Elke override van een virtuele methode vinden voordat de basisklasse verandert.
- In de hele codebase de aanroepers opsommen van een functie of klassemethode met namespace, zoals `net::Socket::send`.
- Nagaan waar een klasse met `new` wordt aangemaakt en welke members ze daarna raakt.

## Waarom C++ structuur nodig heeft in plaats van tekstzoeken

In C++ zijn namen niet uniek. `send` kan een losse functie zijn, een member van drie klassen en een override in een vierde. Namespaces, templates en definities buiten de klasse, zoals `Socket::send` in een `.cpp`-bestand, verdelen één type over veel bestanden. Tekstzoeken levert elke match op, maar vertelt een agent niet welke een aanroep bereikt.

Maguyva indexeert klassen, members en aanroepen samen met hun eigenaars, zodat een agent de echte structuur kan volgen voordat hij iets wijzigt.

## Wat Maguyva in C++ extraheert

Maguyva dekt de gangbare C++-extensies voor bron- en headerbestanden, waaronder `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh` en `.hxx`. Klassen, structs en functies worden geëxtraheerd, en een definitie buiten de klasse zoals `void Socket::send()` wordt toegeschreven aan haar eigenaarklasse en namespace. Virtuele members worden vastgelegd, en templateparameters maken deel uit van signaturen.

Receivertypering volgt parameters, lokale declaraties, velden, range-based `for`-lussen en `auto`, en kijkt door `unique_ptr`, `shared_ptr` en `optional` heen, zodat een aanroep zoals `conn->send()` naar de juiste klasse kan worden opgelost. Basisklasseclausules voeden de overerving, en `new`-expressies tellen als instantiëring.

Dezelfde maskering van export- en annotatiemacro's als bij C is van toepassing. Ongeveer 273 namen uit de standaardbibliotheek (`std::cout`, `std::endl`, `printf` en vergelijkbare) worden uit de relaties gefilterd. De graaf legt aanroepen vast, includes, overerving, overrides, instantiëring, typeverwijzingen, lees- en schrijfacties, en `throw`-randen.

## Voorbeeldprompts voor agents

- "Welke klassen overschrijven `Renderer::draw`, en wie roept het aan?" (`dependency_search`)
- "Laat me `OrderBook::match` en elke aanroeper zien." (`find_symbol`)
- "Leg uit hoe een marktdatabericht de strategie-engine bereikt." (`get_task_context`)

## Bekende beperkingen

- `.h` staat in de extensielijsten van C, C++ en Objective-C, dus in bomen met zowel C als C++ worden headers door die profielen gedeeld.
- Bodies van objectachtige macro's worden niet geparseerd, en aanroepen van gefilterde namen uit de standaardbibliotheek zijn geen randen in de graaf. Gebruik `text_pattern_search` voor macro's en gebruik van `std::`.

## Volgende stappen

Koppel een repository via de [snelstart](/nl/docs/quickstart) en bekijk daarna de ondersteuningsmatrix op de [compatibiliteitspagina](/nl/docs/compatibility). Is een deel van de boom puur C, lees dan ook de [C-gids](/nl/languages/c).

## Enginedetails

- Definities buiten de klasse zoals `void Socket::send()` worden toegeschreven aan hun eigenaarklasse en namespace, en virtuele members worden vastgelegd.
- Receivertypering volgt parameters, lokale variabelen, velden, range-based `for` en `auto`, en kijkt door `unique_ptr`, `shared_ptr` en `optional` heen.
- Basisklasseclausules voeden de overerving, `new`-expressies tellen als instantiëring, en ongeveer 273 namen uit de standaardbibliotheek worden uit de relaties gefilterd.

## Nuttige MCP-instappunten

- `find_symbol`: Gebruik het voor een gekwalificeerde naam zoals `OrderBook::match` wanneer je de definitie en aanroepers nodig hebt.
- `dependency_search`: Gebruik het vóór een signatuurwijziging op een basisklasse of virtuele methode om overrides en aanroepers te vinden.
- `get_task_context`: Gebruik het voor prompts zoals "leg uit hoe een marktdatabericht de strategie-engine bereikt".
