crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> typeid(*<class>).name(), откуда 15 в имени
ЙаМайскЫйПчОЛ
  опции профиля:
сообщение 27.8.2009, 12:07
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 154
Регистрация: 10.7.2008
Из: СПб
Пользователь №: 232

Спасибо сказали: 7 раз(а)




Репутация:   5  


Доброго времени суток.

вот такой код
#include "parameter.h"
#include <typeinfo>
#include <iostream>
#include <string>
int main(int argc, char ** argv)
{
    Parameter * fpw = new FreqParametrWgt();
    ModeParametrWgt * mpw = new ModeParametrWgt();
    FreqParametrWgt * fpw1 = new FreqParametrWgt();

    std::cout << typeid(*fpw).name() << '\n';
    std::cout << typeid(*fpw1).name() << '\n';
    std::cout << typeid(*mpw).name() << '\n';

    return 0;
}

а вывод вот:
Раскрывающийся текст

15FreqParametrWgt
15FreqParametrWgt
15ModeParametrWgt

вопрос... откуда 15 в имене???
впринципе не критично, но не понятно...
ЗЫ: вывод одинаковый в виндовсе и в линуксе

Сообщение отредактировал ЙаМайскЫйПчОЛ - 27.8.2009, 12:09
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.8.2009, 12:17
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Первый раз сталкиваюсь с таким ключевым словом - typeid
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ЙаМайскЫйПчОЛ
  опции профиля:
сообщение 27.8.2009, 12:21
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 154
Регистрация: 10.7.2008
Из: СПб
Пользователь №: 232

Спасибо сказали: 7 раз(а)




Репутация:   5  


Я тоже, мне просто на этапе выполнения надо сравнить два класса, этот метод описан у Шилдта
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.8.2009, 12:24
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Я вот в аглицкой вики нашёл, там нет "15"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 27.8.2009, 12:50
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Похоже что 15 это длина имени класса, а вот кто ее печатает или добавляет к имени пока не смотрел.

Точно, это длина имени класса.
Проверял на gcc (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2).

Причем если в typeid передать указатель на объект, то впереди этой сигнатуры добавляется 'P' (P6Person).
Для стандартных типов длина не указывается, т.е.
int - 'i'
int* - 'Pi'

И вот еще ссылку нашел: http://bytes.com/topic/c/answers/139862-typeinfo
Если используются namespace, то впереди будет идти N<длина имени namespace><имя namespace>.

Сообщение отредактировал BRE - 27.8.2009, 13:23
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ЙаМайскЫйПчОЛ
  опции профиля:
сообщение 27.8.2009, 13:19
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 154
Регистрация: 10.7.2008
Из: СПб
Пользователь №: 232

Спасибо сказали: 7 раз(а)




Репутация:   5  


Litkevich Yuriy,
Совершенно верно... по другим экзамплам тоже все ровно, а суровая правда жизни... 15 не понимаю(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ЙаМайскЫйПчОЛ
  опции профиля:
сообщение 27.8.2009, 14:38
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 154
Регистрация: 10.7.2008
Из: СПб
Пользователь №: 232

Спасибо сказали: 7 раз(а)




Репутация:   5  


BRE, это да совпадает с длинной, но... лано еще потестю...
пример из вики который дал Юрий тоже не так работает... у меня приписка 6 и 8 соответственно, т.е. именно длина...
под виндой под линём , результат одинаковый - наверное дело в гцц

Сообщение отредактировал ЙаМайскЫйПчОЛ - 27.8.2009, 14:44
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 27.8.2009, 14:45
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(ЙаМайскЫйПчОЛ @ 27.8.2009, 15:38) *
BRE, это да совпадает с длинной, но... лано еще потестю...
пример из вики который дал Юрий тоже не так работает... у меня приписка 6 и 8 соответственно, т.е. именно длина...
под виндой под линём , результат одинаковый - наверное дело в гцц

Если нужны имена, то нужно парсить строку...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ЙаМайскЫйПчОЛ
  опции профиля:
сообщение 27.8.2009, 14:50
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 154
Регистрация: 10.7.2008
Из: СПб
Пользователь №: 232

Спасибо сказали: 7 раз(а)




Репутация:   5  


BRE, мне имя фактически не важно, я их буду сравнивать так ( typeid(*fpw) == typeid(*fpw1) )
коректно, логично и практично, главное мне выяснить, чтоб объекты были от одного класса созданы, так что сам имя проверять не буду... просто попался пример в руки решил проверить, получилась херня, вот и заинтересовался
с англицкой вики Caution: the actual text returned by type_info::name() is implementation specific so don't rely on it if attempting to produce portable code. ))) вот всё и ястно (НЕ ЮЗАТЬ)

Сообщение отредактировал ЙаМайскЫйПчОЛ - 27.8.2009, 15:00
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 27.8.2009, 15:02
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(ЙаМайскЫйПчОЛ @ 27.8.2009, 15:50) *
просто попался пример в руки решил проверить, получилась херня, вот и заинтересовался

+1
Ты написал, я тоже заинтересовался, полез проверять... :)
Вот интересно, что на других компиляторах будет выдаваться?
Сам могу только на gcc проверить.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 0:30