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

时间:2015-02-03 10:06:33

标签: c++ polymorphism

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)
}

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

1 个答案:

答案 0 :(得分:1)

  

我有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
    }
}

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

你不能强迫编译器使用多态来接受list<T>所需的list<U>,无论TU是什么,因为这些将会在多态方面总是不相关的。