LINUX.ORG.RU

распарсить typeid(экземпляр класса).name()

как это к примеру делает с++filt - я в свое время искал более простой и компактный код но так и не нашел :(

sS ★★★★★
()
Ответ на: комментарий от anonymous

Примерчика не у кого нет как перед именем класса полученного таким способом, убрать цифры?

anonymous
()
Ответ на: комментарий от anonymous

>А примерчик можно?

#include <iostream>
class TestClass
{
 
};
int main() {
TestClass a;
std::cout << typeid(a).name() << "\n";  
return 0;
}

sS ★★★★★
()
Ответ на: комментарий от anonymous

>Примерчика не у кого нет как перед именем класса полученного таким способом, убрать цифры?

Цифра это число символов - так что atoi(a) и вперед

sS ★★★★★
()
Ответ на: комментарий от sS

Я чтобы получить имя класса делаю так:

const char* TObject::getClassName() { char buf[5]; sprintf(buf,"%d",atoi(typeid(*this).name())); return typeid(*this).name()+strlen(buf); }

Может можно как то по компактней?

anonymous
()
Ответ на: комментарий от sS

Я чтобы получить имя класса делаю так:

const char* TObject::getClassName()
{
char buf[5];
sprintf(buf,"%d",atoi(typeid(*this).name()));
return typeid(*this).name()+strlen(buf);
}

Может можно как то по компактней?

anonymous
()
Ответ на: комментарий от anonymous

>Может можно как то по компактней?

Шутник вы батенька ;)

hint: попробуйте засунуть в ваш код класс, основанный на многопараметрическом темплайте и отнаследованный от нескольких таких же сложных темплайтов да еще и с различными квалификаторами

sS ★★★★★
()
Ответ на: комментарий от anonymous

Есть файл

#include cxxabi.h

У него есть функция __cxa_demangle, которая возвращает читаемое имя класса. А уж остальное - как сказали. А лучше - по регексу разобрать. Надёжнее будет

adarovsky ★★★★
()
Ответ на: комментарий от sS

>hint: попробуйте засунуть в ваш код класс, основанный на >многопараметрическом темплайте и отнаследованный от нескольких таких же >сложных темплайтов да еще и с различными квалификаторами

А как это влияет на имя класса?
Что, вообще советуете?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.