Avatar ·

ما الفرق بين `typedef` و `using` في C++؟ متى نستخدم أيهما؟

```html

مرحبًا أيها الزملاء! لقد بدأت مؤخرًا في تعلم لغة C++ واصطدمت بطريقتين لإنشاء أسماء مستعارة للأنواع: الطريقة القديمة الجيدة typedef والطريقة الجديدة using (أو إعلان الاسم المستعار)، والتي ظهرت في معيار C++11.

أفهم أن كلاهما يفعل نفس الشيء تقريبًا. على سبيل المثال، يمكنني كتابة:

typedef unsigned long long ULL;
using ULL = unsigned long long;

ويبدو أنه لا يوجد فرق على الإطلاق. لكنني سمعت أن using أفضل ويُوصى به في الكود الحديث. لماذا؟ ما الفرق الحقيقي؟ هل هناك حالات لا يعمل فيها typedef بينما يعمل using؟ أم العكس؟

أنا مهتم بشكل خاص بالحالات المعقدة: العمل مع المؤشرات للدوال، والقوالب، والأنواع المتداخلة. لقد حاولت إنشاء اسم مستعار لفئة قالب باستخدام typedef ولم ينجح الأمر. ربما أفعل شيئًا خاطئًا.

إليك مثال يربكني:

// هل هذا يعمل؟
template<typename T>
typedef std::vector<T> Vec;  // خطأ في الترجمة!

// وهل هذا؟
template<typename T>
using Vec = std::vector<T