簡體   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