Avatar ·

أين ولماذا تحتاج إلى وضع الكلمات المفتاحية template و typename في C++؟

مرحبًا أيها الزملاء! لقد كنت أكتب بلغة C++ لمدة عام تقريبًا، لكن القوالب لا تزال تسبب لي الصداع. خاصة أن الكلمات المفتاحية `template` و `typename` في سياق الأسماء التابعة (dependent names) تربكني. أفهم أنها ضرورية لكي يتمكن المترجم من تحليل الكود، لكن متى بالضبط يجب وضعها - يظل لغزًا بالنسبة لي. إليك مثال محدد يربكني. لنفترض أن لدي فئة قالب حاوية، وأريد كتابة دالة تأخذ مكررًا (iterator) لهذه الحاوية وتصل إلى النوع المتداخل `value_type`: ```cpp #include template void processContainer(const Container& c) { typename Container::const_iterator it = c.begin(); // ... نفعل شيئًا مع المكرر } ``` هنا يجب علي كتابة `typename` قبل `Container::const_iterator`. لماذا؟ ففي النهاية `const_iterator` هو نوع محدد بوضوح داخل `std::vector`. أفهم أنه إذا كتبت فقط `Container::const_iterator`، فقد يعتقد المترجم