【发布时间】:2010-03-04 01:36:12
【问题描述】:
嗨!任何人都知道如何使下面代码中的“chug(derlist);”行工作?
#include <iostream>
#include <list>
using namespace std;
class Base
{
public:
virtual void chug() { cout << "Base chug\n"; }
};
class Derived : public Base
{
public:
virtual void chug() { cout << "Derived chug\n"; }
void foo() { cout << "Derived foo\n"; }
};
void chug(list<Base*>& alist)
{
for (list<Base*>::iterator i = alist.begin(), z = alist.end(); i != z; ++i)
(*i)->chug();
}
int main()
{
list<Base*> baselist;
list<Derived*> derlist;
baselist.push_back(new Base);
baselist.push_back(new Base);
derlist.push_back(new Derived);
derlist.push_back(new Derived);
chug(baselist);
// chug(derlist); // How do I make this work?
return 0;
}
我需要这个的原因基本上是,我有一个包含非常复杂对象的容器,我需要将它传递给某些函数,这些函数只关心那些复杂对象中的一两个虚函数。
我知道简短的回答是“你不能”,我真的在寻找人们用来解决这个问题的任何技巧/习语。
提前致谢。
【问题讨论】:
标签: c++ stl polymorphism containers