# C++ w Maguyva: grafy klas i wywołań dla dużych baz kodu

Canonical source: https://maguyva.ai/pl/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 obsługuje C++ przez AST, symbole i graf, dzięki czemu agenci AI śledzą klasy, przestrzenie nazw, wirtualne nadpisania i wywołujących w dużych bazach kodu C++.

## Migawka wsparcia

- Poziom: Obsługa AST i symboli
- Programowanie
- Rozszerzenia: .c, .c++, .cc, .cpp, .cxx, .h, +4 więcej
- Prawdziwe parsowanie AST dla wyszukiwania świadomego składni i kontekstu strukturalnego.
- Nazwane symbole zasilają wyszukiwanie semantyczne i wzajemne odwołania. Nawigacja po grafie jest dostępna po włączeniu ekstrakcji relacji.
- Ten język dostarcza symbole i relacje do wyszukiwania uwzględniającego graf; obsługiwane typy krawędzi zależą od jego rodzimych konstrukcji.
- Dostępne są zarówno parsowanie AST, jak i ekstrakcja symboli.

## Najlepsze dopasowanie

- Silniki gier, systemy transakcyjne, przeglądarki i inne duże bazy kodu C++, w których zmiana jednego nagłówka przebudowuje pół drzewa.
- Hierarchie klas z metodami wirtualnymi, w których wykonywana metoda jest zdefiniowana w innym miejscu niż wywołanie.
- Refaktoryzacje wspierane przez agentów, które przed zmianą sygnatury potrzebują wywołujących i nadpisań.

## Workflow agentów

- Znaleźć wszystkie nadpisania metody wirtualnej przed zmianą klasy bazowej.
- Wypisać w całej bazie kodu wywołujących funkcję lub metodę klasy z przestrzenią nazw, na przykład `net::Socket::send`.
- Prześledzić, gdzie klasa jest tworzona przez `new` i których składowych dotyka potem.

## Dlaczego C++ potrzebuje struktury, a nie wyszukiwania tekstu

W C++ nazwy nie są unikalne. `send` może być wolną funkcją, składową trzech klas i nadpisaniem w czwartej. Przestrzenie nazw, szablony i definicje poza klasą, takie jak `Socket::send` w pliku `.cpp`, rozpraszają jeden typ po wielu plikach. Wyszukiwanie tekstowe zwraca każde dopasowanie, ale nie mówi agentowi, do którego trafia wywołanie.

Maguyva indeksuje klasy, składowe i wywołania razem z ich właścicielami, aby agent mógł podążać za prawdziwą strukturą przed edycją.

## Co Maguyva wyodrębnia w C++

Maguyva obejmuje typowe rozszerzenia źródeł i nagłówków C++, w tym `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh` i `.hxx`. Wyodrębniane są klasy, struktury i funkcje, a definicja poza klasą, taka jak `void Socket::send()`, jest przypisywana do klasy i przestrzeni nazw właściciela. Składowe wirtualne są zapisywane, a parametry szablonów są częścią sygnatur.

Typowanie odbiorców śledzi parametry, deklaracje lokalne, pola, pętle `for` oparte na zakresie oraz `auto`, i patrzy przez `unique_ptr`, `shared_ptr` i `optional`, więc wywołanie takie jak `conn->send()` można rozwiązać do właściwej klasy. Klauzule klas bazowych zasilają dziedziczenie, a wyrażenia `new` liczą się jako tworzenie instancji.

Obowiązuje to samo maskowanie makr eksportu i adnotacji co w C. Około 273 nazw biblioteki standardowej (`std::cout`, `std::endl`, `printf` i podobne) jest filtrowanych z relacji. Graf zapisuje wywołania, include'y, dziedziczenie, nadpisania, tworzenie instancji, odwołania do typów, odczyty i zapisy oraz krawędzie `throw`.

## Przykładowe prompty dla agentów

- „Które klasy nadpisują `Renderer::draw` i kto je wywołuje?” (`dependency_search`)
- „Pokaż mi `OrderBook::match` i wszystkich wywołujących.” (`find_symbol`)
- „Wyjaśnij, jak komunikat z danymi rynkowymi trafia do silnika strategii.” (`get_task_context`)

## Znane ograniczenia

- `.h` występuje na listach rozszerzeń C, C++ i Objective-C, więc w drzewach łączących C i C++ nagłówki są współdzielone między tymi profilami.
- Treści makr obiektowych nie są parsowane, a wywołania odfiltrowanych nazw biblioteki standardowej nie są krawędziami grafu. Do makr i użyć `std::` stosuj `text_pattern_search`.

## Kolejne kroki

Podłącz repozytorium za pomocą [szybkiego startu](/pl/docs/quickstart), a potem sprawdź macierz obsługi na [stronie zgodności](/pl/docs/compatibility). Jeśli część drzewa to czyste C, przeczytaj też [przewodnik po C](/pl/languages/c).

## Szczegóły silnika

- Definicje poza klasą, takie jak `void Socket::send()`, są przypisywane do klasy i przestrzeni nazw właściciela, a składowe wirtualne są zapisywane.
- Typowanie odbiorców śledzi parametry, zmienne lokalne, pola, `for` oparte na zakresie i `auto`, i patrzy przez `unique_ptr`, `shared_ptr` i `optional`.
- Klauzule klas bazowych zasilają dziedziczenie, wyrażenia `new` liczą się jako tworzenie instancji, a około 273 nazw biblioteki standardowej jest filtrowanych z relacji.

## Przydatne punkty wejścia MCP

- `find_symbol`: Używaj go z nazwą kwalifikowaną, taką jak `OrderBook::match`, gdy potrzebujesz definicji i wywołujących.
- `dependency_search`: Przed zmianą sygnatury użyj go na klasie bazowej lub metodzie wirtualnej, aby znaleźć nadpisania i wywołujących.
- `get_task_context`: Używaj go do promptów typu „wyjaśnij, jak komunikat z danymi rynkowymi trafia do silnika strategii”.
