Introdutory note:大約一個月前我開始在大學學習C++。這是一個任務。我們現在正在凝視,並沒有掌握許多先進的概念。我們想象你有一個Book
。 Book
是一個Pages*
的動態數組。每個Page
可以是WrittenPage
或DrawnPage
。如果你想打印所有的Pages
你使用virtual method
。如果您只想打印DrawnPages
或WrittenPages
,則必須在Book
內部進行某種過濾。怎麼做?現在我發現你需要typeid
或某種其他的手段來比較每個Page
的subtype
。如果您急於快速簡單地查看接受的答案,請通過@CantChooseUsernames。它對我的問題很好。如果你有更多的專業知識,我想聽聽你對@n.m新答案的看法。 。如果你認爲它給討論帶來了新的和有意義的東西,不要讓目前接受的答案阻止你評論或發佈你自己的答案。如何在C++中傳遞一個類(不是對象)作爲參數
原題:
我有一個類MyObj中這是TheseObj和ThoseObj的超類。
Class TheseObj : public MyObj {
}
Class ThoseObj : public MyObj {
}
我有一個包含一個std其他類:: vector的使用中,我想只列出TheseObj指針MyObj中的實例和非靜態方法:
Class MyClass {
private:
vector<MyObj*> vec;
public:
void listTheseObj() {
for each (myObj* obj in vec) {
if(typeid(*obj) == typeid(theseObj)) {
cout << *obj << endl;
}
}
}
}
所有的運營商都已經正確超載。
This works great。現在問題是我有更多的地方需要做同樣的事情,所以我需要一個可以接收GENERIC向量和類TYPE的模板方法,以便我可以執行類似以下操作:
listObjects(class_name_here, vec);
我設法創造:
template <class T>
void listObjectsOfOneType(const type_info& class_name_here, const vector<T*>& vec) {
for each (T* obj in vec) {
if(typeid(*obj) == typeid(class_name_here)) {
cout << *obj << endl;
}
}
}
但我不知道:
- 如果模板的方法是正確的
- 我怎樣才能把它叫做
希望我已經說清楚了,非常感謝您的提前。
「這很好用」 - 也許對於非常小的值很好。您應該使用虛函數來運行子類型特定的代碼。 'typeid'基本上從來都不是正確的用法。 –
如何發佈一些更精緻的東西?如果你可以做一些很棒的例子。 –
我不知道你真正的問題是什麼。它真的列出了一些特定類型的對象,或其他? –