[英]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
子类Evaluator
和CFG
。 评价者有一个名为LoadPlugins方法,它做什么它的名字一样,通过this
通经法DLL Connect
。 好吧,在第一种情况下,在Connect中对Generic *
的强制转换应返回NULL
。 但是,据我所知,在第二种情况下,应该返回一个有效的指针。 它似乎并非以这种方式发生。 我对此有错吗?
众所周知,dynamic_cast打破了许多编译器(包括MSVC和gcc)的模块界限。 我不知道为什么会这样,但是使用谷歌搜索会产生很多成功。 我建议首先尝试摆脱dynamic_cast,而不要尝试找出为什么在第二种情况下它返回null的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.