سؤال

هل هناك أي مشكلات قد تجعل نظام إنشاء التعليمات البرمجية لقالب T4 الخاص بـ MS غير مناسب لإنشاء تعليمات برمجية C++؟

هل كانت مفيدة؟

المحلول

ويمكن أن تولد أي نص تريد، بما في ذلك رمز C ++.

نصائح أخرى

إجابة طويلة بعض الشيء ولكن أعتقد أن البعض قد يجدها مثيرة للاهتمام

أود أن أقول إن T4 ممتاز لإنشاء C++ به

قد يرد البعض بأن C++ لديها بالفعل أدوات للقيام بـ MetaProgramming مثل:

المعالج

باستخدام المعالج المسبق ووحدات الماكرو ذات الترتيب الأعلى، يمكنك تحقيق ما يمكنك فعله باستخدام T4 إلى حد ما، لكنني أقول أن هناك بعض الفوائد المقنعة جدًا لـ T4:

  1. من السهل تصحيح وفهم الكود الذي تم إنشاؤه من T4
  2. يعد MetaProgramming مع T4 أبسط من المعالج المسبق.يمكن للمعالج المسبق تنفيذ وحدات ماكرو مثل الحد الأقصى/الدقيقة بسهولة كافية، ولكن عندما نتحدث عن القوالب المعتمدة على النماذج، يصبح الأمر صعبًا
  3. T4 أقوى من المعالج المسبق مما يسهل تطوير القوالب
  4. يمكن تنفيذ T4 كجزء من عملية الإنشاء أو عند الطلب

التخصص الجزئي في القالب

أنا أحب حيل التخصص الجزئي في القالب ولكني أتحدث من تجربتي أنه ليس الجميع يحب الحفاظ عليها.

لقد سعيت دائمًا لتقليل تكرار التعليمات البرمجية في محاولة لزيادة إمكانية الصيانة.بالإضافة إلى ذلك، أفضّل أخطاء وقت الترجمة على أخطاء وقت التشغيل عندما يكون ذلك ممكنًا.لذلك بعد قراءة Modern C++ لـ Andrei Alexandrescu اعتقدت أنني وجدت إجابة.

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

هل كانوا مخطئين في فعل ذلك؟فيما يتعلق بقابلية الصيانة، أود أن أقول إنهم قاموا بالاختيار الصحيح على الرغم من أن ذلك يحزنني.

وجهة نظري في هذه الحكاية هي أن T4 له بعض الفوائد مقارنة بحيل التخصص الجزئي للقالب:

  1. من السهل تصحيح وفهم الكود الذي تم إنشاؤه من T4
  2. T4 أبسط
  3. T4 أقوى
  4. يمكن تنفيذ T4 كجزء من عملية الإنشاء أو عند الطلب
  5. إذا تمكن المشرفون من فهم قالب T4، فلا يزال بإمكانهم إنقاذ الكود (البدء في صيانة الكود الذي تم إنشاؤه والتخلص من القالب).لم يكن ذلك ممكنا في الحكاية أعلاه.

بالطبع في C++ MetaProgramming عبارة عن مزيج من التخصص المسبق والتخصص الجزئي للقالب.

العيوب

هناك عيوب مع T4 بالطبع؛

  1. إنه خاص بـ Visual Studio (أو Mono خاص).ومع ذلك، يمكن بالطبع جعل الكود الذي تم إنشاؤه قابلاً للتجميع بواسطة دول مجلس التعاون الخليجي وغيرها.
  2. إنه غير قياسي
  3. يبدو أن مشاريع Visual Studio C++ لا تدعم T4 مما يجبرني على استخدام مشروع .NET وهمي لإنشاء التعليمات البرمجية من frmo.

تغليف

بشكل عام، لقد فقدت الاهتمام بإجراء MetaProgramming C++ المتقدم باستخدام حيل رائعة مع PreProcessor أو نظام الكتابة (على الرغم من أنني أستخدمها في مهام أبسط) وأعتمد على T4 لذلك هذه الأيام.

إذا كان أي شخص مهتمًا بعينة حول كيفية القيام بذلك في C++، فيمكنك التحقق من ذلك الرسومات التفاعلية.إنها مكتبة لـ C# وVB وPowerShell وSmallBasic للقيام بالرسومات البسيطة.هناك أستخدم T4 لإنشاء جميع واجهات برمجة التطبيقات والتعليمات البرمجية النمطية لتمرير الرسائل بين .NET وC++ (لا أستخدم C++/CLI إذا كان بإمكاني تجنب كل ذلك) من نموذج يصف واجهة برمجة التطبيقات.تعد إضافة طريقة جديدة أمرًا بسيطًا مثل توسيع النموذج وإعادة إنشاء جميع ملفات القالب، ثم أقوم بتنفيذ طريقة مجردة في C++ وأقوم بالأشياء الممتعة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top