介绍性说明:大约一个月前,我开始在大学学习 C++。这是为了一个任务。我们现在只是盯着看,并没有掌握很多先进的概念。
tl;博士:假设你有一个Book
. 是的Book
动态数组Pages*
。每个都Page
可以是 aWrittenPage
或 a DrawnPage
。如果要打印所有内容,Pages
请使用virtual method
. 如果您只想打印DrawnPages
或者WrittenPages
您必须在Book
. 怎么做?现在我发现你需要typeid
或其他某种方式来比较subtype
每个Page
. 如果您急于做一些快速简单的事情,请查看@CantChooseUsernames 接受的答案。它对我的问题很有效。如果您有更多的专业知识,我想听听您对@nm 的新答案的看法。如果您认为当前接受的答案为讨论带来了新的和有意义的东西,请不要让当前接受的答案阻止您发表评论或发布自己的答案。
原始问题:
我有一个 MyObj 类,它是 TheseObj 和 ThatObj 的超类。
Class TheseObj : public MyObj {
}
Class ThoseObj : public MyObj {
}
我有另一个类,它包含一个带有指向 MyObj 实例的指针的 std::vector 和一个我只想列出这些对象的非静态方法:
Class MyClass {
private:
vector<MyObj*> vec;
public:
void listTheseObj() {
for each (myObj* obj in vec) {
if(typeid(*obj) == typeid(theseObj)) {
cout << *obj << endl;
}
}
}
}
所有运算符都已正确重载。
这很好用。现在的问题是我有更多的地方需要做同样的事情,所以我需要一个可以接收 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;
}
}
}
但我不确定:
- 如果模板方法正确
- 我怎么称呼它
希望我已经说清楚了,非常感谢您抽出宝贵的时间。