Здравствуйте.
Есть иерархия классов и некий отдельный "специфичный класс", который является вторым наследником для нескольких классов из первой иерархии.
Я обхожу все классы и пытаюсь каждый сконвертировать через dynamic_cast к специфичному классу. Иногда это получается (там где есть такой родитель).
Вопросы
1. Это нормальный способ работы с классами или какой-то лайфхак от с++ и лучше такое не использовать?
2. Это производительно или в критичные места такое лучше не совать?
#include <iostream>
#include <vector>
class Base {
public :
virtual ~Base() = default;
virtual void printName() = 0;
};
class Specific
{
public:
virtual void specific() = 0;
};
class A : public Base, public Specific {
public :
void printName() override {
std::cout << "A\n";
}
void specific() override
{
std::cout << "Specific\n";
}
};
class B : virtual public Base {
public :
void printName() override {
std::cout << "B\n";
}
};
class C : public Base {
public :
void printName() override {
std::cout << "C\n";
}
};
int main()
{
std::vector<Base*> lst;
lst.push_back( new B() );
lst.push_back( new C() );
lst.push_back( new A() );
for( auto& n: lst )
{
n->printName();
if (Specific* s = dynamic_cast<Specific*>(n))
s->specific();
}
return 0;
}