Сообщения

Сообщения за февраль, 2018

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