قيود القالب في لغة C
في لغة C، لا يوجد حاليًا دعم مدمج لفرض القيود على معلمات القالب كما هو موضح في لغة C# باستخدام القيود العامة. ومع ذلك، هناك حلول بديلة لتحقيق تأثير مماثل.
C 11 Static Assertion
يوفر C 11 الماكرو static_assert والقالب std::is_base_of لتنفيذ وقت الترجمة الشيكات. في المثال المقدم، يمكنك استخدام هذه العناصر على النحو التالي:
#include
template
class Foo {
Foo() {
// Compile-time check
static_assert(std::is_base_of::value, "type parameter of this class must derive from IFoo");
// ...
}
};
يضمن هذا أن المعلمة T يجب أن تكون مشتقة من IFoo في وقت الترجمة، مما يمنع إنشاء مثيلات مثل Foo
C 0x Template Constraints
لاحظ أن C 0x، المعروف أيضًا باسم C 17، يقدم دعمًا أصليًا لمفهوم قيود القالب، مما يسمح لك بتحديد القيود مباشرة على معلمات القالب باستخدام بناء جملة مثل القالب
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3