0
我有一個列表定義爲:的std ::名單的static_cast衍生迭代
std::list<CExcited*> mExcitedList;
興奮的定義是:
class CExcited
{
public:
CExcited::CExcited(){}
virtual int getAnswer() = 0;
};
我有一個派生類:
class CExcitedA :: public CExcited
{
public:
CExcitedA::CExcitedA(){}
int getAnswer() {return 1;}
};
而且另:
class CExcitedB :: public CExcited
{
public:
CExcitedB::CExcitedB(){}
int getAnswer() {return 2;}
};
我一些元素添加到列表中
CExcitedA* excitedA = new ExcitedA();
mExcitedList.add_back(excitedA);
CExcitedB* excitedB = new ExcitedB();
mExcitedList.add_back(excitedB);
,當我重複的名單,我不能工作,如何找出在被它,我已經添加了類運行時。
我試圖無濟於事
for (std::list<Excited*>::iterator iter = mExcitedList.begin(); iter != mExcitedList.end(); iter++)
{
if (typeid(*iter) == typeid(CExcitedA*))
{
}
if (typeid(dynamic_cast<CExcitedA*>(*iter)) == typeid(CExcitedA*))
{
}
}
這似乎應該是簡單的,但我不能夠得到它。
編輯從這裏的答案
CExcitedA* testA = dynamic_cast<CExcitedA*> (*iter);
if (testA != 0)
{
std::cout << "ES: " << dynamic_cast<CExcitedA*> (*iter)->getAnswer() << std::endl;
}
CExcitedB* testB = dynamic_cast<CExcitedB*> (*iter);
if (testB != 0)
{
std::cout << "EB: " << dynamic_cast<CExcitedB*> (*iter)->getAnswer() << std::endl;
}
你打算什麼類的信息做是什麼? –
每個類都實現了特定的成員函數,並且基於它的類我將能夠知道調用哪個方法。 – Sting
你不能用虛函數來實現這個嗎? –