اقتباسهذا الكود مع أنه سيعمل الا انك لا تعرف ماذا سيحدث اذا مررت type مثل Person أو MyClass و هنا الفرق, ففي اللغات الأعلى يكون المترجم حريص على أن يكون الكود صحيحاً ليس فقط Syntactically بل أيضاً Symantically قدر المستطاع
كله إلا الـ metaprogramming الله يرضى عليك :P
في Java و #C, الـ Generics استحدثت لتحل مشكلة واحدة "تقريباً" هي جعل الـ data structure في المكتبات القياسية generic...
لو تذكر الطريقة القديمة كانت جميع العناصر يجب أن تكون وارثة من Object, و ما صاحبها من boxing و unboxing... في Java حتى الآن هذه المشكلة, بينما في #C أعتقد تم تفاديها.
غير ذلك الـ Generics ليس لها فائدة.
في ++C, الأمر مختلف تماماً, هذا الشيء يسمى بأسلوب الـ policies .. أي التعاقد بين كود المستخدم و كود المكتبة :)
في ++C أنت تقوم بكتابة الخوارزمية باستخدام الـ templates و من ثم استخدامها مع أي نوع تحب, ليس هناك قيود و لا حواجز, و لو كان هناك خطأ, سيتم اكتشافه لحظة الترجمة لأنه لا وجود للـ templates أصلاً في الكود النهائي على عكس #C و Java.
كيف ستقوم بكتابة reverse بـ Java أو #C دع عنك assign من boost باستخدام الـ generics :)
أما التأكد من أن الكود صحيح المعنى فلايوجد مترجم على سطح الأرض يمكنه إخبارك بذلك طالما أن الكود صحيح من الناحية النحوية,
template <class T>
T addTwoVariables(const T& first, const T& second)
{
return first + second;
}إذا لم تقم بتعريف المعامل '+' للـ Person أو MyClass فسيصدر خطأ وقت الترجمة بكل بساطة!
تحياتي ...
تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 20 يوليو 2009 في 19:54


