Как в С++ полиморфно обработать множество объектов унаследованных от некоторого одного

Вот есть у меня несколько объектов, реализующих один интерфейс. И есть необходимость обрабатвать их по разному в некотором классе в зависимости от их типа

#include <iostream>
#include <vector>

class A {};

class B: public A {};

class C: public A {};

class X
{
    public:
        void x(A* a) { std::cout << "x(A* a) was called\n"; }

        void x(B* b) { std::cout << "x(B* a) was called\n"; }

        void x(C* c) { std::cout << "x(C* a) was called\n"; }
};


int main()
{
    std::vector<A*> vec;
    vec.push_back(new B);
    vec.push_back(new C);

    X* x = new X;

    for(A* a: vec) { x->x(a); } //дважды выведет x(A* a) was called\n

    return 0;
}

Если мне вперемежку приходит коллекция разных классов унаследованных от A, как мне реализовать уникальное поведение для каждого из этих типов? Запихивать необходимый функционал в сами классы B и C я не могу.


Ответы (0 шт):