Полиморфизм членов шаблона, - возможно ли такое?
От: Аноним  
Дата: 06.02.04 10:48
Оценка:
Добрый день, уважаемый all.

Вопрос следующего характера:
если есть абстрактный родительский класс A,
class A
{
public:
   virtual void f()=0;
};


и его наследник класс B

class B: public A
{
public:
   virtual void f() { cout<< "B::f()" <<endl; }
};


как можно реализовать использование, например, std::list<A*> вместо std::list<B*>, например, в таком случае:

void func(const std::list<A*> & lst)
{
   for (std::list<A*>::const_iterator it=lst.begin();it!=lst.end();it++)
      (*it)->f();
}

int main ()
{
   B tmp;
   std::list<B*> lst;
   lst.push_back(&tmp);
   func(lst);
   return 0;
}


Собственно, если бы функция main выглядела так:
int main ()
{
   A * tmp=new B();
   std::list<A*> lst;
   lst.push_back(tmp);
   func(lst);
   return 0;
}


Никаких бы проблем не было, но но всегда удобно хранить список указателей на родительские классы..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.