在下面的代码中,我只是试图尝试使用异构std :: list,其中我已经将三个派生类对象存储在Base *类型的列表中。当从列表中检索数据时,我遇到了一些问题。我该怎么做呢?下面的代码起作用,因为所有三个类在定义上都是相同的。所以编译器以某种方式设法给我预期的输出。从异构std ::列表中检索数据
#include <list>
#include <iostream>
#include <string.h>
class Base;
typedef std::list<Base*> any_list;
class Base{};
class Derived1 : public Base
{
public:
std::string s;
Derived1():s("D1"){}
};
class Derived2 : public Base
{
public:
std::string s;
Derived2():s("D2"){}
};
class Derived3 : public Base
{
public:
std::string s;
Derived3():s("D3"){}
};
int main(int argc, char **argv) {
any_list l;
l.push_back(new Derived1);
l.push_back(new Derived2);
l.push_back(new Derived3);
for(any_list::iterator itr=l.begin();itr!=l.end();++itr)
std::cout<<((Derived1*)*itr)->s;
}
请注意,O/P是 -
D1 D2 D3
现在,如果我在任何类添加一个额外的成员,这并不工作(这是预期的和正确的)。那么我应该如何对数据进行输入并从异构列表中检索数据呢? 我在这里错过了什么吗?
上面列出的解决方案的“fancier”版本可以在这里找到(http://ideone.com/YXFq64)。 – jxh 2013-04-05 06:02:27