Загрузка объекта динамического класса

Есть ли способ использовать что-то вроде std::is_base_of на основе строк, сгенерированных typedid(...).name(), а не на самих типах?

In extenso, учитывая что-то вроде:

class A {...};
class B: public A {...};

A a;
B b;

std::string sa = typeid(a).name;
std::string sb = typeid(b).name;

Мне нужно что-то вроде этого во время выполнения:

if( std::is_base_of(sa, sb) )
{...}

Это связано с сериализацией объектов в файлах.

Есть ли способ сделать это (без наддува)?


person Jacques    schedule 14.09.2020    source источник
comment
@cigien. Как написано, это связано с сериализацией структур объектов в файл (и перезагрузкой).   -  person Jacques    schedule 14.09.2020
comment
Ни в коем случае нельзя полагаться на typeid(...).name. Это значение может меняться между компиляторами, между версиями одного и того же компилятора, между двумя компиляциями и даже между двумя запусками одной и той же программы. Или он может быть одинаковым для нескольких типов или просто случайным значением мусора. Я не совсем уверен, чего стоит это имя на самом деле.   -  person churill    schedule 14.09.2020
comment
@Jacques Можете ли вы использовать другие библиотеки сериализации помимо boost? Вот эта чудесная жемчужина s11n. Немного более старый, но в целом легкий и очень настраиваемый в отношении выходных форматов. Я использовал его (дольше) некоторое время назад в области встроенного программирования, где ускорение было бесполезным.   -  person πάντα ῥεῖ    schedule 14.09.2020