# C++ i Maguyva: klass- och anropsgrafer för stora kodbaser

Canonical source: https://maguyva.ai/sv/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 stöder C++ med AST, symboler och graf, så att AI-agenter kan följa klasser, namnrymder, virtuella överskrivningar och anropare i stora C++-kodbaser.

## Stödöversikt

- Nivå: Stöd för AST och symboler
- Programmering
- Filändelser: .c, .c++, .cc, .cpp, .cxx, .h, +4 till
- Riktig AST-parsning för syntaxmedveten sökning och strukturell kontext.
- Namngivna symboler driver semantisk uppslagning och korsreferenser. Grafnavigering är tillgänglig när relationsextraktion är aktiverad.
- Det här språket bidrar med symboler och relationer till grafmedveten sökning; vilka kanttyper som stöds varierar med språkets inbyggda konstruktioner.
- Både AST-parsning och symbolextraktion är tillgängliga.

## Bäst lämpad för

- Spelmotorer, handelssystem, webbläsare och andra stora C++-kodbaser där en ändrad header bygger om halva trädet.
- Klasshierarkier med virtuella metoder, där metoden som körs är definierad någon annanstans än där den anropas.
- Agentstödd refaktorering som behöver anropare och överskrivningar före en signaturändring.

## Agentarbetsflöden

- Hitta alla överskrivningar av en virtuell metod innan basklassen ändras.
- Lista anropare i hela kodbasen till en funktion eller klassmetod i en namnrymd, till exempel `net::Socket::send`.
- Spåra var en klass skapas med `new` och vilka medlemmar den rör därefter.

## Varför C++ behöver struktur, inte textsökning

I C++ är namn inte unika. `send` kan vara en fri funktion, en medlem i tre klasser och en överskrivning i en fjärde. Namnrymder, templates och definitioner utanför klassen, som `Socket::send` i en `.cpp`-fil, sprider en typ över många filer. Textsökning returnerar varje träff men säger inte till en agent vilken av dem ett anrop når.

Maguyva indexerar klasser, medlemmar och anrop tillsammans med sina ägare, så att en agent kan följa den verkliga strukturen innan den redigerar.

## Vad Maguyva extraherar i C++

Maguyva täcker de vanliga filändelserna för C++-källkod och headers, bland annat `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh` och `.hxx`. Klasser, structs och funktioner extraheras, och en definition utanför klassen som `void Socket::send()` tillskrivs sin ägarklass och namnrymd. Virtuella medlemmar registreras, och templateparametrar ingår i signaturerna.

Mottagartypningen följer parametrar, lokala deklarationer, fält, intervallbaserade `for`-loopar och `auto`, och ser igenom `unique_ptr`, `shared_ptr` och `optional`, så ett anrop som `conn->send()` kan lösas till rätt klass. Basklassatser matar arvet, och `new`-uttryck räknas som instansiering.

Samma maskering av export- och annoteringsmakron som i C gäller. Omkring 273 namn i standardbiblioteket (`std::cout`, `std::endl`, `printf` och liknande) filtreras bort ur relationerna. Grafen registrerar anrop, includes, arv, överskrivningar, instansiering, typreferenser, läsningar och skrivningar samt `throw`-kanter.

## Exempel på prompter för agenter

- "Vilka klasser skriver över `Renderer::draw`, och vem anropar den?" (`dependency_search`)
- "Visa mig `OrderBook::match` och alla som anropar den." (`find_symbol`)
- "Förklara hur ett marknadsdatameddelande når strategimotorn." (`get_task_context`)

## Kända begränsningar

- `.h` finns i filändelselistorna för C, C++ och Objective-C, så i träd som blandar C och C++ delas headers mellan de profilerna.
- Kroppar i objektliknande makron parsas inte, och anrop till filtrerade namn i standardbiblioteket är inte kanter i grafen. Använd `text_pattern_search` för makron och användning av `std::`.

## Nästa steg

Anslut ett repo med [snabbstarten](/sv/docs/quickstart) och kontrollera sedan stödmatrisen på [kompatibilitetssidan](/sv/docs/compatibility). Om delar av trädet är ren C, läs även [guiden för C](/sv/languages/c).

## Motordetaljer

- Definitioner utanför klassen som `void Socket::send()` tillskrivs sin ägarklass och namnrymd, och virtuella medlemmar registreras.
- Mottagartypningen följer parametrar, lokala variabler, fält, intervallbaserad `for` och `auto`, och ser igenom `unique_ptr`, `shared_ptr` och `optional`.
- Basklassatser matar arvet, `new`-uttryck räknas som instansiering, och omkring 273 namn i standardbiblioteket filtreras bort ur relationerna.

## Användbara MCP-ingångar

- `find_symbol`: Använd det för ett kvalificerat namn som `OrderBook::match` när du behöver definitionen och anroparna.
- `dependency_search`: Använd det på en basklass eller virtuell metod före en signaturändring för att hitta överskrivningar och anropare.
- `get_task_context`: Använd det för prompter som "förklara hur ett marknadsdatameddelande når strategimotorn".
