我有一個類CAbstractNode使用將dynamic_cast,它有5個派生類它是不好的設計在C++
5,只有2(特殊)需要一個方法SetValue()和一個構件INT NVAL;
//myFunction is virtual function of base(cAbstractNode) implemented in 2 special derived classes
myFunction(CAbstractNode * obj, int val)
{
Derived_02 nodeObj = dynamic_cast<Derived_02*>(obj);
if(res != NULL)
{
nodeObj->setValue(val);
}
//remaining code goes here...
}
//myFunction is virtual function implemented in remaining 3 derived classes (setValue() is not needed here)
myFunction(CAbstractNode * obj, int val)
{
//remaining code goes here...
}
應我去與動態轉換爲2派生類(如上所示)
或
我將的setValue()方法,作爲虛擬在鹼(CAbstractNode) 和在2實施派生類和此方法保持空的其他3派生類?
'dynamic_cast'應該避免使用虛擬函數。 –
是的,使用動態轉換打開類型是不好的設計。 –
也想添加'std :: variant'作爲可能的替代品。你並不總是希望這個功能包含在這個類中。 – chris