Здравствуйте, Anfi, Вы писали:
A>Помогите новичку в STL.
A>Начитавшись корифеев STL, понял, что надо писать алгоритмы вместо циклов.
A>Как, не используя циклы, можно вызвать функцию член производного класса
A>для каждого элемента вектора указателей на базовый класс.
A>Иными словами, вызвать внутри STL-алгоритма функцию-член от производного класса
A>т.е. призвести приведение типа ЭЛЕМЕНТА контейнера перед вызовом функции-члена?
Ну а так-то почему нельзя сделать (если уж очень нужно):
#include <vector>
#include <algorithm>
#include <functional>
class A
{ public: int Foo(){return 0;}; };
class B : public A
{ public: int Boo(){return 1;}; };
void
call_Boo( A * p )
{
((B *)p)->Boo();
}
int main()
{
std::vector<A *> AV;
// Заполняем контейнер AV указателями на производный класс B
// ...
std::for_each(AV.begin(), AV.end(), std::mem_fun<int,A>(&A::Foo));
std::for_each(AV.begin(), AV.end(), call_Boo );
return 0;
}
... << RSDN@Home 1.1.4 beta 3 rev. 185>>