С++ получить имя класса без 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

Комментарии

Популярные сообщения из этого блога

Siege Up! Editor (beta)

STM32F4 и программный выход в DFU

Git и Yandex.Disk