# C++ en Maguyva: grafos de clases y llamadas para bases de código grandes

Canonical source: https://maguyva.ai/es/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 admite C++ con AST, símbolos y grafo, para que los agentes de IA sigan clases, namespaces, sobrescrituras virtuales y llamadores en grandes bases de código C++.

## Resumen de soporte

- Nivel: Soporte de AST y símbolos
- Programación
- Extensiones: .c, .c++, .cc, .cpp, .cxx, .h, +4 más
- Análisis AST real para búsqueda con reconocimiento de sintaxis y contexto estructural.
- Los símbolos con nombre alimentan la búsqueda semántica y las referencias cruzadas. La navegación por grafo está disponible cuando la extracción de relaciones está habilitada.
- Este lenguaje aporta símbolos y relaciones a la búsqueda basada en grafos; los tipos de arista disponibles varían según sus construcciones nativas.
- Están disponibles tanto el análisis AST como la extracción de símbolos.

## Mejor uso

- Motores de juegos, sistemas de trading, navegadores y otras grandes bases de código C++ donde cambiar un header recompila medio árbol.
- Jerarquías de clases con métodos virtuales, donde el método que se ejecuta está definido en un lugar distinto de donde se llama.
- Refactorizaciones asistidas por agentes que necesitan conocer llamadores y sobrescrituras antes de un cambio de firma.

## Flujos de trabajo del agente

- Encontrar todas las sobrescrituras de un método virtual antes de cambiar la clase base.
- Listar en toda la base de código los llamadores de una función o método de clase con namespace, como `net::Socket::send`.
- Rastrear dónde se construye una clase con `new` y qué miembros toca después.

## Por qué C++ necesita estructura y no búsqueda de texto

En C++ los nombres no son únicos. `send` puede ser una función libre, un miembro de tres clases y una sobrescritura en una cuarta. Los namespaces, las plantillas y las definiciones fuera de la clase, como `Socket::send` en un archivo `.cpp`, reparten un tipo en muchos archivos. La búsqueda de texto devuelve todas las coincidencias, pero no le dice a un agente a cuál llega una llamada.

Maguyva indexa clases, miembros y llamadas con sus propietarios, para que un agente siga la estructura real antes de editar.

## Qué extrae Maguyva en C++

Maguyva cubre las extensiones habituales de fuentes y headers de C++, entre ellas `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh` y `.hxx`. Se extraen clases, structs y funciones, y una definición fuera de la clase como `void Socket::send()` se atribuye a su clase y namespace propietarios. Se registran los miembros virtuales, y los parámetros de plantilla forman parte de las firmas.

La tipificación de receptores sigue parámetros, declaraciones locales, campos, bucles `for` basados en rango y `auto`, y mira a través de `unique_ptr`, `shared_ptr` y `optional`, así que una llamada como `conn->send()` puede resolverse a la clase correcta. Las cláusulas de clase base alimentan la herencia, y las expresiones `new` cuentan como instanciación.

Se aplica el mismo enmascaramiento de macros de exportación y anotación que en C. Unos 273 nombres de la biblioteca estándar (`std::cout`, `std::endl`, `printf` y similares) se filtran de las relaciones. El grafo registra llamadas, includes, herencia, sobrescrituras, instanciación, referencias de tipo, lecturas y escrituras, y aristas de `throw`.

## Ejemplos de prompts para agentes

- "¿Qué clases sobrescriben `Renderer::draw` y quién lo llama?" (`dependency_search`)
- "Muéstrame `OrderBook::match` y todos sus llamadores." (`find_symbol`)
- "Explica cómo llega un mensaje de datos de mercado al motor de estrategias." (`get_task_context`)

## Limitaciones conocidas

- `.h` aparece en las listas de extensiones de C, C++ y Objective-C, por lo que en árboles que mezclan C y C++ los headers se comparten entre esos perfiles.
- Los cuerpos de las macros tipo objeto no se analizan, y las llamadas a nombres filtrados de la biblioteca estándar no son aristas del grafo. Usa `text_pattern_search` para macros y usos de `std::`.

## Próximos pasos

Conecta un repositorio con el [inicio rápido](/es/docs/quickstart) y luego revisa la matriz de compatibilidad en la [página de compatibilidad](/es/docs/compatibility). Si parte del árbol es C puro, lee también la [guía de C](/es/languages/c).

## Detalles del motor

- Las definiciones fuera de la clase como `void Socket::send()` se atribuyen a su clase y namespace propietarios, y se registran los miembros virtuales.
- La tipificación de receptores sigue parámetros, variables locales, campos, `for` basados en rango y `auto`, y mira a través de `unique_ptr`, `shared_ptr` y `optional`.
- Las cláusulas de clase base alimentan la herencia, las expresiones `new` cuentan como instanciación, y unos 273 nombres de la biblioteca estándar se filtran de las relaciones.

## Puntos de entrada MCP útiles

- `find_symbol`: Úsalo con un nombre calificado como `OrderBook::match` cuando necesites la definición y los llamadores.
- `dependency_search`: Úsalo sobre una clase base o un método virtual para encontrar sobrescrituras y llamadores antes de un cambio de firma.
- `get_task_context`: Úsalo para prompts como "explica cómo llega un mensaje de datos de mercado al motor de estrategias".
