# Maguyva में C++: बड़े कोडबेस के लिए क्लास और कॉल ग्राफ़

Canonical source: https://maguyva.ai/hi/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, C++ को AST, सिंबल और ग्राफ़ के साथ सपोर्ट करता है, ताकि AI एजेंट बड़े C++ कोडबेस में क्लास, नेमस्पेस, वर्चुअल ओवरराइड और कॉलर ट्रेस कर सकें।

## सपोर्ट स्नैपशॉट

- टियर: AST और सिंबल सपोर्ट
- प्रोग्रामिंग
- एक्सटेंशन: .c, .c++, .cc, .cpp, .cxx, .h, +4 और
- सिंटैक्स-अवेयर सर्च और स्ट्रक्चरल कॉन्टेक्स्ट के लिए असली AST पार्सिंग।
- नामित सिंबल सिमेंटिक लुकअप और क्रॉस-रेफ़रेंस को फ़ीड करते हैं। रिलेशनशिप एक्सट्रैक्शन सक्षम होने पर ग्राफ़ नेविगेशन उपलब्ध होता है।
- यह भाषा ग्राफ़-अवेयर सर्च में सिंबल्स और रिलेशनशिप्स जोड़ती है; सपोर्टेड एज प्रकार इसके नेटिव कंस्ट्रक्ट्स के अनुसार बदलते हैं।
- AST पार्सिंग और सिंबल एक्सट्रैक्शन, दोनों उपलब्ध हैं।

## सबसे उपयुक्त

- गेम इंजन, ट्रेडिंग सिस्टम, ब्राउज़र और दूसरे बड़े C++ कोडबेस, जहाँ एक हेडर बदलने से आधा ट्री फिर से बिल्ड होता है।
- वर्चुअल मेथड वाले क्लास पदानुक्रम, जहाँ चलने वाला मेथड वहाँ परिभाषित होता है जहाँ उसे कॉल नहीं किया जाता।
- एजेंट की मदद से रीफ़ैक्टरिंग, जिसे सिग्नेचर बदलने से पहले कॉलर और ओवरराइड चाहिए।

## एजेंट वर्कफ़्लो

- बेस क्लास बदलने से पहले किसी वर्चुअल मेथड का हर ओवरराइड ढूँढना।
- पूरे कोडबेस में `net::Socket::send` जैसे नेमस्पेस वाले फ़ंक्शन या क्लास मेथड के कॉलर की सूची बनाना।
- कोई क्लास `new` से कहाँ बनती है और उसके बाद किन मेंबर को छूती है, इसे ट्रेस करना।

## C++ को टेक्स्ट सर्च की नहीं, संरचना की ज़रूरत क्यों है

C++ में नाम अनोखे नहीं होते। `send` कोई फ़्री फ़ंक्शन, तीन क्लास का मेंबर और चौथी क्लास में ओवरराइड हो सकता है। नेमस्पेस, टेम्पलेट और क्लास के बाहर की परिभाषाएँ, जैसे किसी `.cpp` फ़ाइल में `Socket::send`, एक type को कई फ़ाइलों में बाँट देती हैं। टेक्स्ट सर्च हर मिलान लौटाता है, लेकिन एजेंट को यह नहीं बताता कि कॉल किस तक पहुँचता है।

Maguyva क्लास, मेंबर और कॉल को उनके ओनर के साथ इंडेक्स करता है, ताकि एजेंट एडिट करने से पहले असली संरचना को फ़ॉलो करे।

## Maguyva, C++ से क्या निकालता है

Maguyva आम C++ सोर्स और हेडर एक्सटेंशन को कवर करता है, जिनमें `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh` और `.hxx` शामिल हैं। क्लास, structs और फ़ंक्शन निकाले जाते हैं, और `void Socket::send()` जैसी क्लास के बाहर की परिभाषा ओनर क्लास और namespace से जोड़ी जाती है। वर्चुअल मेंबर दर्ज होते हैं, और टेम्पलेट पैरामीटर सिग्नेचर का हिस्सा होते हैं।

रिसीवर टाइपिंग पैरामीटर, लोकल घोषणाओं, फ़ील्ड, रेंज-आधारित `for` लूप और `auto` को फ़ॉलो करती है, और `unique_ptr`, `shared_ptr` और `optional` के अंदर तक देखती है, ताकि `conn->send()` जैसा कॉल सही क्लास पर रिज़ॉल्व हो। बेस-क्लास क्लॉज़ इनहेरिटेंस को फ़ीड करते हैं, और `new` एक्सप्रेशन इंस्टैंशिएशन गिने जाते हैं।

C वाली export और एनोटेशन मैक्रो मास्किंग यहाँ भी लागू होती है। लगभग 273 स्टैंडर्ड-लाइब्रेरी नाम (`std::cout`, `std::endl`, `printf` और इसी तरह के) संबंधों से फ़िल्टर किए जाते हैं। ग्राफ़ कॉल, इनक्लूड, इनहेरिटेंस, ओवरराइड, इंस्टैंशिएशन, टाइप रेफ़रेंस, रीड और राइट, और `throw` एज दर्ज करता है।

## एजेंट प्रॉम्प्ट के उदाहरण

- "कौन-सी क्लास `Renderer::draw` को ओवरराइड करती हैं, और उसे कौन कॉल करता है?" (`dependency_search`)
- "मुझे `OrderBook::match` और उसके हर कॉलर को दिखाओ।" (`find_symbol`)
- "समझाओ कि मार्केट-डेटा संदेश स्ट्रैटेजी इंजन तक कैसे पहुँचता है।" (`get_task_context`)

## ज्ञात सीमाएँ

- `.h` C, C++ और Objective-C की एक्सटेंशन सूचियों में आता है, इसलिए C और C++ मिले ट्री में हेडर इन प्रोफ़ाइल के बीच बँट जाते हैं।
- ऑब्जेक्ट-जैसे मैक्रो की बॉडी पार्स नहीं होती, और फ़िल्टर किए गए स्टैंडर्ड-लाइब्रेरी नामों को किए गए कॉल ग्राफ़ एज नहीं हैं। मैक्रो और `std::` उपयोग के लिए `text_pattern_search` इस्तेमाल करें।

## अगले कदम

[क्विकस्टार्ट](/hi/docs/quickstart) से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स [कम्पैटिबिलिटी पेज](/hi/docs/compatibility) पर देखें। अगर ट्री का कुछ हिस्सा शुद्ध C है, तो [C गाइड](/hi/languages/c) भी पढ़ें।

## इंजन विवरण

- `void Socket::send()` जैसी क्लास के बाहर की परिभाषाएँ अपनी ओनर क्लास और namespace से जोड़ी जाती हैं, और वर्चुअल मेंबर दर्ज होते हैं।
- रिसीवर टाइपिंग पैरामीटर, लोकल, फ़ील्ड, रेंज-आधारित `for` और `auto` को फ़ॉलो करती है, और `unique_ptr`, `shared_ptr` और `optional` के अंदर तक देखती है।
- बेस-क्लास क्लॉज़ इनहेरिटेंस को फ़ीड करते हैं, `new` एक्सप्रेशन इंस्टैंशिएशन गिने जाते हैं, और लगभग 273 स्टैंडर्ड-लाइब्रेरी नाम संबंधों से फ़िल्टर किए जाते हैं।

## उपयोगी MCP एंट्री पॉइंट

- `find_symbol`: जब आपको परिभाषा और कॉलर चाहिए, तो `OrderBook::match` जैसे पूरी तरह क्वालिफ़ाइड नाम के साथ इस्तेमाल करें।
- `dependency_search`: सिग्नेचर बदलने से पहले ओवरराइड और कॉलर ढूँढने के लिए किसी बेस क्लास या वर्चुअल मेथड पर इस्तेमाल करें।
- `get_task_context`: "समझाओ कि मार्केट-डेटा संदेश स्ट्रैटेजी इंजन तक कैसे पहुँचता है" जैसे प्रॉम्प्ट के लिए इस्तेमाल करें।
