وظائف C ++ تعرض لنظام البرمجة النصية - أنواع المعلمات الذاتية

StackOverflow https://stackoverflow.com/questions/2039152

  •  19-09-2019
  •  | 
  •  

سؤال

يحدد محرك قواعد C ++ القواعد في XML حيث يتلخص كل قاعدة على "إذا كانت x، ثم Y" حيث X مجموعة من الاختبارات و Y مجموعة من الإجراءات. في رمز C ++، يتم إنشاء "وظائف" قابلة للاستخدام في الاختبارات / الإجراءات كصف لكل وظيفة "، وكل منها طريقة" تشغيل (Args) "... كل يأخذ مجموعة من المعلمات الخاصة بها.

هذا يعمل بشكل جيد.

ولكن، هناك أداة منفصلة مطلوبة لحفظ المستخدمين يدويا اليدوية XML؛ يهدف محرك القواعد إلى غير المبرمجين. تحتاج الأداة إلى معرفة جميع "الوظائف" المتاحة، وكذلك معلمات الإدخال المطلوبة. ما هي أفضل طريقة للنظر في القيام بذلك؟ اعتبرت اثنين من الاحتمالات:

  1. يصف ملف التكوين "الوظائف" ومعلماتها، وقراءة الأداة. هذا سهل جدا، ويمكن أن يستخدمه رمز C ++ الفعلي لأداء التحقق من صحة الوسيطة، ولكن لا يزال لا يضمن أن C ++ و XML غير مضمون في المزامنة - يمكن للمبرمج تعديل C ++ ونسيان تحديث XML يؤدي إلى التحقق من صحة الأخطاء
  2. تحتوي فئة كل وظيفة على طرق تصفها. بطريقة ما يتم تحميل الأداة فئات C ++ ... سيكون هذا سهلا في انعكاس دعم اللغة ولكن Messier في C ++، وربما يتعين عليك بناء DLL خاص مع جميع "الوظائف" أو أي شيء. وهو ما يعني النفقات العامة الإضافية.

ما هو المنطقي بالنظر إلى طبيعة C ++ على وجه التحديد؟

تحرير: هل العنوان الوصف؟ لا أستطيع التفكير في واحدة أفضل.

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

المحلول

هناك طريقة 3RD - IDL.

تخيل أن لديك تطبيق عمل عميل، ولديك مولد رمز ينتج فئات المجمع التي يمكنك النشر عليها على العميل والخادم بحيث يمكن للمستخدم كتابة تطبيق باستخدام API العميل ويحدث المعالجة على الخادم ... هذا هو سيناريو RPC نموذجي ويستخدم في DCE-RPC، ONC-RPC، كوربا، كوم وغيرها.

الحيلة هنا هي تحديد توقيعات الأساليب التي يمكن للعميل الاتصال بها، والذي يتم في لغة تعريف واجهة. لا يجب أن يكون هذا صعبا، ولكنه مصدر API العميل / الخادم، تقوم بتشغيله عبر مولد وينتج فئات C ++ التي تقوم بتجميعها للعميل لاستخدامها.

في حالتك، يبدو أن XML هو IDL. لذلك يمكنك إنشاء أداة تأخذ XML وتنتج رؤوس C ++ التي تصف الوظائف التي تعرض عليها رمزك. لا تضطر حقا إلى إنشاء ملفات CPP (يمكنك) ولكن من الأسهل فقط إنشاء الرؤوس، لذلك لا يمكن للمبرمج الذي يضيف دالة / معلمة جديدة لتحديث التنفيذ - فلن يترجم مرة واحدة فقط تم إعادة إنشاؤها.

يمكنك إنشاء رأس رقم # في رؤوس C ++ الموجودة إذا كان هناك المزيد من تعريفات الوظيفة فقط.

لذلك - هذا اقتراحي، # 3: إنشاء التعريفات من توقيعات XML النهائية الخاصة بك.

نصائح أخرى

هناك طريقة أخرى:

  • إضافة قيود أن تكون أنواع الوسيطة موحدة في مكالمة دالة.
  • تحديد بعض الحد الأقصى لعدد الحجج
  • صف الأنواع والسبق أي double converrts إلى String ولكن ليس العكس

ثم لديك

void f(int a1) .. f(int a1 .. int aN)
void f(double a1) .. f(double a1 .. double aN)
..
void f(T a1) .. 

وغيرها من أنواع البيانات الخرسانة مثل السلسلة، والتاريخ، إلخ.

مزايا:

  • الاختلافات في التوقيع ثابت وعادية
  • من الممكن فقط توفير توقيع نوع "أكبر" (T)
  • يعمل بشكل جيد مع قوالب وجسور اللغة
  • يمكن أن تحذر العمل و مع 2 المعلمات عدد صحيح غير محدد
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top