# C++ v Maguyva: grafy tříd a volání pro velké kódové základny

Canonical source: https://maguyva.ai/cs/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 podporuje C++ s AST, symboly a grafem, takže AI agenti sledují třídy, jmenné prostory, virtuální přepisy a volající ve velkých kódových základnách C++.

## Přehled podpory

- Úroveň: Podpora AST a symbolů
- Programování
- Přípony: .c, .c++, .cc, .cpp, .cxx, .h, +4 dalších
- Skutečné parsování AST pro vyhledávání citlivé na syntaxi a strukturální kontext.
- Pojmenované symboly napájejí sémantické vyhledávání a křížové odkazy. Navigace v grafu je k dispozici, když je povolena extrakce vztahů.
- Tento jazyk přispívá symboly a vztahy do vyhledávání využívajícího graf; podporované typy hran se liší podle jeho nativních konstrukcí.
- K dispozici je parsování AST i extrakce symbolů.

## Nejlépe se hodí pro

- Herní enginy, obchodní systémy, prohlížeče a další velké kódové základny v C++, kde změna jedné hlavičky přestaví půl stromu.
- Hierarchie tříd s virtuálními metodami, kde je spouštěná metoda definovaná jinde, než kde se volá.
- Refaktoring s podporou agentů, který před změnou signatury potřebuje volající a přepisy.

## Workflow agentů

- Najít všechny přepisy virtuální metody, než se změní základní třída.
- Vypsat v celé kódové základně volající funkce nebo metody třídy ve jmenném prostoru, například `net::Socket::send`.
- Dohledat, kde se třída vytváří přes `new` a kterých členů se pak dotkne.

## Proč C++ potřebuje strukturu, ne textové vyhledávání

V C++ nejsou názvy jedinečné. `send` může být volná funkce, člen tří tříd a přepis ve čtvrté. Jmenné prostory, šablony a definice mimo třídu, jako `Socket::send` v souboru `.cpp`, rozdělují jeden typ do mnoha souborů. Textové vyhledávání vrátí každou shodu, ale agentovi neřekne, ke které z nich volání dojde.

Maguyva indexuje třídy, členy a volání i s jejich vlastníky, aby agent mohl před úpravou sledovat skutečnou strukturu.

## Co Maguyva v C++ extrahuje

Maguyva pokrývá běžné přípony zdrojových a hlavičkových souborů C++, mimo jiné `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh` a `.hxx`. Extrahují se třídy, struktury a funkce a definice mimo třídu, jako `void Socket::send()`, se přiřadí vlastnické třídě a jmennému prostoru. Virtuální členy se zaznamenávají a parametry šablon jsou součástí signatur.

Typování příjemců sleduje parametry, lokální deklarace, položky, cykly `for` přes rozsah a `auto` a vidí skrz `unique_ptr`, `shared_ptr` a `optional`, takže volání jako `conn->send()` lze vyřešit na správnou třídu. Klauzule základních tříd napájejí dědičnost a výrazy `new` se počítají jako vytvoření instance.

Platí stejné maskování exportních a anotačních maker jako u C. Přibližně 273 názvů standardní knihovny (`std::cout`, `std::endl`, `printf` a podobné) se z vazeb odfiltruje. Graf zaznamenává volání, include, dědičnost, přepisy, vytváření instancí, odkazy na typy, čtení a zápisy a hrany `throw`.

## Ukázkové prompty pro agenty

- „Které třídy přepisují `Renderer::draw` a kdo ji volá?“ (`dependency_search`)
- „Ukaž mi `OrderBook::match` a všechny volající.“ (`find_symbol`)
- „Vysvětli, jak se zpráva s tržními daty dostane do strategického enginu.“ (`get_task_context`)

## Známá omezení

- `.h` je v seznamech přípon C, C++ i Objective-C, takže ve stromech s C i C++ hlavičky tyto profily sdílejí.
- Těla objektových maker se neparsují a volání odfiltrovaných názvů standardní knihovny nejsou hranami grafu. Pro makra a použití `std::` použijte `text_pattern_search`.

## Další kroky

Připojte repozitář podle [rychlého startu](/cs/docs/quickstart) a pak si prohlédněte matici podpory na [stránce kompatibility](/cs/docs/compatibility). Pokud je část stromu v čistém C, přečtěte si i [průvodce jazykem C](/cs/languages/c).

## Podrobnosti enginu

- Definice mimo třídu, jako `void Socket::send()`, se přiřazují vlastnické třídě a jmennému prostoru a virtuální členy se zaznamenávají.
- Typování příjemců sleduje parametry, lokální proměnné, položky, `for` přes rozsah a `auto` a vidí skrz `unique_ptr`, `shared_ptr` a `optional`.
- Klauzule základních tříd napájejí dědičnost, výrazy `new` se počítají jako vytvoření instance a přibližně 273 názvů standardní knihovny se z vazeb odfiltruje.

## Užitečné vstupní body MCP

- `find_symbol`: Použijte s kvalifikovaným názvem jako `OrderBook::match`, když potřebujete definici a volající.
- `dependency_search`: Před změnou signatury použijte na základní třídě nebo virtuální metodě a najdete přepisy i volající.
- `get_task_context`: Použijte pro prompty typu „vysvětli, jak se zpráva s tržními daty dostane do strategického enginu“.
