"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > هل يمكن لـ C++ استنتاج أنواع القوالب من أنواع إرجاع الوظائف؟

هل يمكن لـ C++ استنتاج أنواع القوالب من أنواع إرجاع الوظائف؟

تم النشر بتاريخ 2024-11-10
تصفح:663

Can C   Deduce Template Types from Function Return Types?

خصم القالب بناءً على نوع إرجاع الوظيفة في C

في لغة C ، قد يكون من المرغوب فيه استخدام خصم القالب لتبسيط التعليمات البرمجية التي تنشئ مثيلًا عامًا دالات بناءً على أنواع بيانات وسيطات الوظيفة. خذ بعين الاعتبار المثال التالي:

GCPtr ptr1 = GC::Allocate();
GCPtr ptr2 = GC::Allocate();

بدلاً من تحديد معلمات النوع العامة بشكل صريح، فإن الهدف هو تحقيق هذا الخصم باستخدام نوع الإرجاع للدالة GC::Allocate(). ومع ذلك، لا تسمح لغة C بخصم النوع بناءً على نوع الإرجاع.

class GC
{
public:
    template
    static GCPtr Allocate();
};

على الرغم من أن نوع الإرجاع عام، إلا أن المترجم يتطلب المواصفات الصريحة لمعلمات نوع القالب و عند إنشاء مثيل للدالة GC::Allocate().

للتخفيف من هذا القيد، يمكن تقديم وظيفة مساعدة:

template 
void Allocate(GCPtr& p) {
    p = GC::Allocate();
}

باستخدام هذه الوظيفة، يمكن تحقيق الهدف الأصلي على النحو التالي:

GCPtr p;
Allocate(p);

ما إذا كان بناء الجملة هذا يقدم أي ميزة كبيرة على مواصفات النوع الصريحة هو أمر شخصي.

ملاحظة: في C 11، من الممكن حذف واحد إعلانات النوع باستخدام الكلمة الأساسية التلقائية:

auto p = GC::Allocate(); // p is of type GCPtr
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3