سؤال

C++ يبدو أن يكون بدلا عابس عندما يعلن قوالب عبر ملفات متعددة.وبشكل أكثر تحديدا, عند العمل مع قالب فئات رابط نتوقع من جميع تعريفات طريقة للفصل في واحد مترجم object file.عندما كنت تأخذ في الاعتبار رؤوس التعريفات الأخرى ، والميراث وغيرها ، الأمور فوضوي حقا.

هل هناك أي نصائح عامة أو الحلول من أجل تنظيم أو إعادة توزيع قالب الأعضاء التعاريف عبر العديد من الملفات ؟

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

المحلول

هل هناك أي نصائح عامة أو الحلول من أجل تنظيم أو إعادة توزيع قالب الأعضاء التعاريف عبر العديد من الملفات ؟

نعم ؛ لا.

C++ المواصفات يسمح للمترجم أن تكون قادرة على "رؤية" القالب بأكمله (إعلان و تعريف) عند نقطة مثيل ، (بسبب تعقيدات من أي تنفيذ) معظم المجمعين الإبقاء على هذا الشرط.النتيجة هي أن #إدراج أي قالب header كما يجب أن تتضمن #أي مصدر المطلوب إنشاء القالب.

أسهل طريقة للتعامل مع هذا هو تفريغ كل شيء في رأس مضمنة حيث posible خارج الخط عند الضرورة.

إذا كنت حقا يعتبرون هذا غير مقبول وإهانة مشتركة الخيار هو تقسيم القالب في المعتاد رأس/تنفيذ زوج ثم #تشمل تنفيذ الملف في نهاية الرأس.

C++'s "تصدير" الميزة قد أو قد لا توفر الحل آخر.ميزة سيئة دعم وتعريف سيئة;على الرغم من أنه من حيث المبدأ ينبغي أن يسمح نوعا ما منفصلة تجميع قوالب, فإنه ليس بالضرورة أن يلغي الطلب أن المترجم تكون قادرا على رؤية القالب بأكمله الجسم.

نصائح أخرى

عبر كيف العديد من الملفات ؟ إذا كنت ترغب فقط في فئة منفصلة التعاريف من تنفيذ ثم حاول هذه المادة في C++ أسئلة وأجوبة.هذا عن الطريقة الوحيدة التي أعرف من يعمل في هذه اللحظة ، ولكن بعض بيئات التطوير (Eclipse CDT على سبيل المثال) لن رابط هذه الطريقة بشكل صحيح و يمكنك الحصول على الكثير من الأخطاء.ومع ذلك الكتابة الخاصة بك makefiles أو باستخدام Visual C++ وقد عملت دائما بالنسبة لي :-)

عندما/إذا كان المترجم يدعم C++0x ، extern الكلمة يمكن استخدامها لفصل القالب الإعلانات من التعاريف.

انظر هنا من أجل شرح موجز.

أيضا القسم 6.3 " ، نموذج الفصل،" C++ قوالب:الدليل الكامل ديفيد Vandevoorde و نيكولاي م.Josuttis يصف الخيارات الأخرى.

alt text

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