将派生对象列表传递给期望获取基对象列表的函数

passing a list of derived objects to a function that expects to get a list of base objects

本文关键字:对象 列表 获取 期望 函数 派生      更新时间:2023-10-16
Base{
public:
    Base(int i);
    virtual void doSomething(int z);
}
Derived:public Base{
public:
    Derived(int j);   
}
void myFunc(list<Base> myList,int y){
        for(list<Base>::iterator it = myList.begin();it!=myList.end();++it){
            it->doSomething(y);
        }
    }
main(){
    list<Derived> dList;
    myFunc(dList)
}

我似乎无法传递派生列表而不是基础。我知道这样做可能会有问题,因为可以向列表中添加不同的派生类型,但我只想更改列表中的对象,而不是添加更多对象。我尝试玩 const 但仍然没有帮助。我不能使用 for_each 函数,因为做某事会得到一个参数。有什么想法吗?

我有 2 种类型的派生,我想使用基于两种派生类型的列表定义的函数

然后使用模板:

template<typename T>
void myFunc(list<T> myList, int y) {
    for(typename list<T>::iterator it = myList.begin(); it!=myList.end(); ++it){
        it->doSomething(y);
        //use any function present in Base
    }
}

此函数将接受 Base 类型的任何实例或其任何派生类的任何list

你不能强迫编译器使用多态性来接受它期望list<U>list<T>,无论TU是什么,因为这些总是不相关的多态。