【发布时间】:2021-11-28 19:10:07
【问题描述】:
假设我有一个基类和两个派生类:
class a {};
class b : a { int a; };
class c : a { int b; };
我有一个基类的列表,我将派生类插入到列表中:
std::list<a> list;
list.emplace_back(b());
list.emplace_back(c());
现在,我想像这样访问int a:
for(auto i : list)
{
i.a = 5;
}
我已经检查了它是什么类,但编译器仍然不允许我访问它。
如何从基类访问派生类中的任何字段?
这个问题已经被问过很多次了,但到目前为止没有一种方法对我有用。
【问题讨论】:
-
std::list<a>将执行Object Slicing。没有可访问的派生字段。首先你需要一个std::list<std::unique_ptr<A>>或类似的,从那里这个问题可能会有答案。 -
@FrançoisAndrieux 好的,我做到了,现在我得到了函数“std::unique_ptr<..etc>
-
考虑改变你的设计——如果你想使用基类指针的容器,你还应该有虚函数而不是访问派生类的字段。