# C++ i Maguyva: klasse- og kaldgrafer til store kodebaser

Canonical source: https://maguyva.ai/da/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 understøtter C++ med AST, symboler og graf, så AI-agenter kan følge klasser, navnerum, virtuelle overskrivninger og kaldere i store C++-kodebaser.

## Øjebliksbillede af understøttelse

- Niveau: AST- og symbolunderstøttelse
- Programmering
- Filendelser: .c, .c++, .cc, .cpp, .cxx, .h, +4 flere
- Rigtig AST-parsing til syntaksbevidst søgning og strukturel kontekst.
- Navngivne symboler understøtter semantisk opslag og krydsreferencer. Grafnavigation er tilgængelig, når relationsudtræk er aktiveret.
- Dette sprog bidrager med symboler og relationer til grafbaseret søgning; de understøttede kanttyper varierer med sprogets egne konstruktioner.
- Både AST-parsing og symboludtræk er tilgængelige.

## Bedst egnet til

- Spilmotorer, handelssystemer, browsere og andre store C++-kodebaser, hvor én ændret header bygger halvdelen af træet om.
- Klassehierarkier med virtuelle metoder, hvor den metode, der kører, er defineret et andet sted end der, hvor den kaldes.
- Agentunderstøttet refaktorering, der har brug for kaldere og overskrivninger før en signaturændring.

## Agent-arbejdsgange

- Finde alle overskrivninger af en virtuel metode, før basisklassen ændres.
- Liste kaldere i hele kodebasen til en funktion eller klassemetode i et navnerum, for eksempel `net::Socket::send`.
- Spore, hvor en klasse oprettes med `new`, og hvilke medlemmer den berører bagefter.

## Hvorfor C++ kræver struktur, ikke tekstsøgning

I C++ er navne ikke unikke. `send` kan være en fri funktion, et medlem af tre klasser og en overskrivning i en fjerde. Navnerum, templates og definitioner uden for klassen, som `Socket::send` i en `.cpp`-fil, spreder én type over mange filer. Tekstsøgning returnerer hvert match, men fortæller ikke en agent, hvilket af dem et kald rammer.

Maguyva indekserer klasser, medlemmer og kald sammen med deres ejere, så en agent kan følge den reelle struktur, før den redigerer.

## Hvad Maguyva udtrækker i C++

Maguyva dækker de almindelige filendelser for C++-kildekode og headere, herunder `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh` og `.hxx`. Klasser, structs og funktioner udtrækkes, og en definition uden for klassen som `void Socket::send()` tilskrives sin ejerklasse og sit navnerum. Virtuelle medlemmer registreres, og templateparametre indgår i signaturerne.

Modtagertypningen følger parametre, lokale erklæringer, felter, intervalbaserede `for`-løkker og `auto`, og ser igennem `unique_ptr`, `shared_ptr` og `optional`, så et kald som `conn->send()` kan opløses til den rigtige klasse. Basisklasseklausuler fodrer nedarvningen, og `new`-udtryk tæller som instansiering.

Samme maskering af eksport- og annotationsmakroer som i C gælder. Omkring 273 navne i standardbiblioteket (`std::cout`, `std::endl`, `printf` og lignende) filtreres fra relationerne. Grafen registrerer kald, includes, nedarvning, overskrivninger, instansiering, typereferencer, læsninger og skrivninger samt `throw`-kanter.

## Eksempler på prompts til agenter

- "Hvilke klasser overskriver `Renderer::draw`, og hvem kalder den?" (`dependency_search`)
- "Vis mig `OrderBook::match` og alle, der kalder den." (`find_symbol`)
- "Forklar, hvordan en markedsdatabesked når strategimotoren." (`get_task_context`)

## Kendte begrænsninger

- `.h` står på listerne over filendelser for C, C++ og Objective-C, så i træer, der blander C og C++, deles headere mellem de profiler.
- Kroppe i objektlignende makroer parses ikke, og kald til filtrerede navne i standardbiblioteket er ikke kanter i grafen. Brug `text_pattern_search` til makroer og brug af `std::`.

## Næste skridt

Tilslut et repository med [hurtigstarten](/da/docs/quickstart), og se derefter understøttelsesmatricen på [kompatibilitetssiden](/da/docs/compatibility). Hvis dele af træet er ren C, så læs også [guiden til C](/da/languages/c).

## Motordetaljer

- Definitioner uden for klassen som `void Socket::send()` tilskrives deres ejerklasse og navnerum, og virtuelle medlemmer registreres.
- Modtagertypningen følger parametre, lokale variabler, felter, intervalbaseret `for` og `auto`, og ser igennem `unique_ptr`, `shared_ptr` og `optional`.
- Basisklasseklausuler fodrer nedarvningen, `new`-udtryk tæller som instansiering, og omkring 273 navne i standardbiblioteket filtreres fra relationerne.

## Nyttige MCP-indgange

- `find_symbol`: Brug det til et kvalificeret navn som `OrderBook::match`, når du har brug for definitionen og kalderne.
- `dependency_search`: Brug det på en basisklasse eller virtuel metode før en signaturændring for at finde overskrivninger og kaldere.
- `get_task_context`: Brug det til prompts som "forklar, hvordan en markedsdatabesked når strategimotoren".
