我有一个
std::list<TYPE>
可能包含TYPE的子类。我需要迭代列表并调用TYPE中定义的函数的子项重写版本,但我不知道TYPE的哪个子类,引用的类型为TYPE。
如果我使用TYPE引用调用它将调用TYPE的虚方法而不是我的子类方法。有没有办法说“调用最远的子类'这个方法的重写版本?”
答案 0 :(得分:2)
您无法在std::list
中存储引用,并且您的列表中不包含TYPE
子类的实例。
如果将TYPE
的子类的实例分配给TYPE
,它将被“切片”,这意味着所有子类信息都将丢失。这就是调用TYPE
方法的原因 - 对象 是TYPE
,而不是TYPE
的子类。
如果你想要多态,你必须在列表中存储指针 - TYPE*
或智能指针。
答案 1 :(得分:0)
不,因为可能存在从基类继承的各种子类,并且您不确定要调用哪种方法。但是,您可以使用static_cast将基类引用转换为子类引用。