У меня есть иерархия классов, в которой я хочу представить шаблон метода, который бы вел себя как виртуальный.Например, простая иерархия:
class A {
virtual ~A() {}
template<typename T>
void method(T &t) {}
};
class B : public A {
template<typename T>
void method(T &t) {}
};
Затем я создаю объект B:
A *a = new B();
Я знаю, что могу получить тип, сохраненный в a
, по typeid(a)
.Как я могу назвать правильный B::method
динамически, когда я знаю тип?Возможно, у меня может быть такое состояние:
if(typeid(*a)==typeid(B))
static_cast<B*>(a)->method(params);
Но я бы хотел избежать подобных условий.Я думал о создании std::map
с typeid
в качестве ключа, но что бы я назвал значением?