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函数,因为做了一些事情。 有什么想法吗?
答案 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>
,无论T
和U
是什么,因为这些将会在多态方面总是不相关的。