![]() |
|
Модераторы: bsa |
![]()
|
|
| Gtar |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 14.1.2008 Репутация: нет Всего: нет |
Здравствуйте.
При попытке определения типа объекта с использованием typeid, нижеприведенный код выдаёт "P4Base". Вопрос:Что означает приставка Р4? Поиск гуглом ничего внятного не дал. Win XP, Dev C++ (default compiler). также пробовал компилить в Solaris OS 10 и Ubuntu, используя gcc 4.2 . Результат тот же.
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
то что возвращается методом name() не означает имя класса, это может быть все что угодно, это зависит от реализации. НЕдавно в соседней ветке, было обсуждение этого.
|
|||
|
||||
| Annihilator |
|
||||
![]() bytegrinder ![]() ![]() Профиль Группа: Участник Сообщений: 493 Регистрация: 21.11.2006 Где: Омск Репутация: 1 Всего: 3 |
1. Сделай Base полиморфным (добавь туда виртуальную функцию)
2. Напиши так
а если я пишу так
у меня выдает class Base * работаю в VS2008 По этой теме читай здесь Это сообщение отредактировал(а) Annihilator - 5.8.2008, 21:09 -------------------- Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо |
||||
|
|||||
| Gtar |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 14.1.2008 Репутация: нет Всего: нет |
1. Изначальный код и был полиморфным, это я просто упростил для примера, что бы не копипастить 100 строчек ненужного кода
2. Если пишу так :cout<< typeid(*arr).name()<<endl; то выдает "4Base"... То есть уже без "P" но 4-ка все еще тут... 3. В VS хотя бы вывод понятный... А то что у меня получилось.... "P" скорее всего указывает на то что это pointer, а вот "4" - понятия не имею... кста, у меня не Pentium4 В общем после прочтения доков и соседнего топика, можно сделать вывод что typeid().name() если и использовать то лучше только для отладки, но не для хардкорного юзания в программе, так как ее вывод зависит от компилятора и может быть нестабилен... PS: странно что в многих учебниках и референсах это не пишут... Это сообщение отредактировал(а) Gtar - 6.8.2008, 05:09 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
4 - длинна Base в символах Можно присобачить префикс _Z к строке от typeid().name() и програть ее через функцию __cxa_demangle, получишь читаемое имя Это сообщение отредактировал(а) xvr - 6.8.2008, 11:31 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |