Мне интересно узнать больше о преимуществах и ограничениях RTTI на C++. Предположим, у меня есть следующий сценарий:C++ RTTI Registry Pattern
class C {};
class C0 : public C {};
class C1 : public C {};
...
void print(int id, C* c) {
if (id == 0) dynamic_cast<C0 *>(c)->print();
else if (id == 1) dynamic_cast<C0 *>(c)->print();
...
}
Возможно ли реализовать описанный выше пример с использованием шаблона реестра? Например, используя что-то вроде этого:
map<int, ?> registry;
void print(int id, C* c) {
registry[id](c)->print();
}
Вы хотите два свободно стоящих 'print' функций с тем же типом подписи и возврата, но называется по-разному? – AndyG
Ваш пример показывает полиморфизм и виртуальную отправку, это не имеет никакого отношения к RTTI. – Nax
Возможно, вы захотите изменить второй 'dynamic_cast' на' C1 * '. – Quentin