سؤال

لدي ثلاثة فصول: عام ، CFG ، والمقيّم.

هنا عام:

class Generic: public virtual Evaluator, public CFG, public LCDInterface {

هنا CFG:

class CFG : public virtual Evaluator {

والمقيّم فئات فرعية لا شيء.

أنا أقدم DLL المسماة البرنامج المساعد ، وله طريقة تسمى Connect:

void PluginLCD::Connect(Evaluator *visitor) {
    visitor_ = dynamic_cast<Generic *>(visitor);
    if(!visitor_)
        return;
    type_ = visitor_->GetType();
}

إليك كيف أقوم بتجميع DLL من خلال Scons:

env.SharedLibrary(['PluginLCD.cpp', 'Evaluator.cpp', 'Generic.cpp', 'CFG.cpp'])

الآن ، هناك سيناريوهان في الكود الخاص بي. واحد في الفصل LCDControl, ، أي فئات فرعية CFG. السيناريو الآخر أعلاه حيث Generic فئات فرعية Evaluator و CFG. يحتوي المقيِّم على طريقة تسمى loadplugins ، والتي تفعل ما يقترحه اسمه ، تمريره this من خلال DLL عبر الطريقة Connect. حسنًا ، في السيناريو الأول Generic * في الاتصال يجب أن تعود NULL. ومع ذلك ، في السيناريو الثاني ، على حد علمي ، ينبغي إرجاع مؤشر صالح. لا يبدو أنه يحدث بهذه الطريقة. هل أنا مخطئ في هذا؟

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

المحلول

من المعروف أن Dynamic_cast يتخطى حدود الوحدة النمطية مع العديد من المترجمين (بما في ذلك MSVC و GCC). لا أعرف بالضبط سبب ذلك ، لكن Googling لأنه ينتج عنه الكثير من الزيارات. أوصي بمحاولة التخلص من Dynamic_cast في المقام الأول بدلاً من محاولة معرفة سبب عودتها إلى السيناريو الثاني.

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