我見過的建議使用從當許多派生類型是可能的基本類型的實例獲取的派生類型
if(dynamic_cast<DerviedType1*>(base)){
// Do something
}
else if(dynamic_cast<DerviedType2*>(base)){
// Do something else
}
else if(dynamic_cast<DerviedType3*>(base)){
// Do another thing
}
// and so on
雖然功能對這個問題的解決方案,該解決方案還遠遠優雅,而且我希望有一個單行解決方案,沿着decltype
或typeid
的路線,這兩者都不能幫助我。
我的具體問題如下。我有一個函數將一個指向基類實例的指針作爲參數。然後這個函數會調用一個模板函數,它將派生類型作爲參數。例如。
我想保持我的代碼簡單,沒有if
報表一籮筐,但我不知道如何去做。應該注意的是,Base
對象本身不會被傳遞到模板函數中,只是它的類型。
僅供參考,我在尋找沿
void myFunc(Base *base)
{
myTemplateFunc<decltype(base)>();
}
線的東西,但是這隻會返回Base
類型,它並不能幫助我在這裏。
實際上'decltype(基)'將是一個'基地*',不是'基地'。另外,在編譯時必須知道模板的模板參數,所以你必須讓'myFunc'成爲一個模板,它可以用真實類型的'Base'調用,這可能或不可能,所以模板本身不會工作。 –