[英]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.