سؤال

أنا جديد جديد على C ++ وخلفيتي في جافا. لا بد لي من تنفيذ بعض التعليمات البرمجية من Java إلى C ++ ، وظهرت بعض الشكوك بالنسبة إلى فئة كائن Java. لذا ، إذا أردت تنفيذ هذا:

void setInputParameter(String name, Object object) { ..... }

أعتقد أنني يجب أن أستخدم نوع الفراغ أو القوالب أليس كذلك؟ لا أعرف ما هو الإجراء "القياسي" لإنجازه.

شكرًا

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

المحلول

هذا يعتمد على ما تريد القيام به object.

إذا كنت تستخدم قالبًا ، فهذه طرق تتصل بها object سيتم ربطه في وقت التجميع objectنوع S. هذا نوع آمن ، وفضل ، حيث سيتم وضع علامة على أي استخدام غير صالح للكائن كأخطاء برمجية.

يمكنك أيضا تمرير أ void * وألقيه على النوع المطلوب ، على افتراض أن لديك طريقة لمعرفة ما ينبغي أن يكون. هذا أكثر خطورة وأكثر عرضة للأخطاء في الكود الخاص بك. يمكنك أن تجعله أكثر أمانًا باستخدام dynamic_cast<> لتمكين فحص نوع وقت التشغيل.

نصائح أخرى

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

لا يحتوي C ++ على نفس أنواع قدرات التأمل التي تمتلكها Java. بمعنى آخر ، لا توجد طريقة ملائمة لقول شيء مثل myObject.getClass().getName(). أقرب شيء على علم به هو معلومات نوع وقت التشغيل (RTTI) ، والتي يمكنك رؤيتها في العمل هنا.

البديل الآخر هو إنشاء فئة الجذر الخاصة بك ، وكتابة أساليب التأمل الخاصة بك (الكثير من أطر C ++ تقوم بذلك).

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