С++ получить имя класса без RTTI
Собственно, предисторию не помню, но помню что в голову пришла идея получать имя класса из предефайненной константы(!) __PRETTY_FUNCTION__. И еще я знаю что во многих командах разработки RTTI не приветствуется.
Вот код:
template <typename Type>
std::string typeName() {
std::regex regex("Type = ([0-9A-Za-z:<>, ]*)");
std::smatch match;
std::string str(__PRETTY_FUNCTION__);
std::regex_search(str, match, regex);
return match[1].str();
}
Общая идея в том, что бы передать тип в шаблонную функцию, а потом получить имя этого типа из названии функции через регулярку. Код работает в clang и gcc. Результат я кэширую, а потому, скорость работы функции не очень важна. Возможно, я расскажу про то, как кэширую в другой статье, так как происходит это интересным способом.
Вот ссылка на лучшее решение и обсуждение работы в MSVC:
https://stackoverflow.com/questions/35941045/can-i-obtain-c-type-names-in-a-constexpr-way
Вот ссылка на лучшее решение и обсуждение работы в MSVC:
https://stackoverflow.com/questions/35941045/can-i-obtain-c-type-names-in-a-constexpr-way
Комментарии
Отправить комментарий