繁体   English   中英

这是对dynamic_cast的正确使用吗?

[英]Is this proper use of dynamic_cast?

我有三类:通用,CFG和评估器。

这是通用的:

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

这是CFG:

class CFG : public virtual Evaluator {

评估者没有任何子类化。

我提供了一个名为PluginLCD的DLL,它具有一种称为Connect的方法:

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

这是我通过scons编译DLL的方法:

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

现在,我的代码中有两种情况。 一种是LCDControl类,它是CFG子类。 上面的另一个场景是Generic子类EvaluatorCFG 评价者有一个名为LoadPlugins方法,它做什么它的名字一样,通过this通经法DLL Connect 好吧,在第一种情况下,在Connect中对Generic *的强制转换应返回NULL 但是,据我所知,在第二种情况下,应该返回一个有效的指针。 它似乎并非以这种方式发生。 我对此有错吗?

众所周知,dynamic_cast打破了许多编译器(包括MSVC和gcc)的模块界限。 我不知道为什么会这样,但是使用谷歌搜索会产生很多成功。 我建议首先尝试摆脱dynamic_cast,而不要尝试找出为什么在第二种情况下它返回null的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM