![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Есть куча разных классов. Есть указатели на каждый. Указатели должны пихаться в item'ы скажем listbox'a. Хочу воспользоваться чудом RTTI и идентифицировать класс
На этапе компиляции такая ошибка: error: `void*' is not a pointer-to-object type Т.е. чуда не будет ? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
не приводи к void*. А приводи к указателю на базовый класс.
|
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
А тогда какой смысл, если я буду знать базовый класс, то мне и typeid нафиг не нужен. Я думал компилятор каким-то макаром соотносит циферки из указателя к типу "где-то у себя". Хочу чуда, я ему пихаю любую ссылку или указатель, а он мне говорит че я ему посунул. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
SABROG, сделай класс:
|
|||
|
||||
| SABROG |
|
||||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Я еще понимаю, когда можно получить базовый класс из наследника, но ведь обратного не существует:
error: invalid conversion from `MyBaseForAll*' to `B*' |
||||||
|
|||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
dynamic_cast рулит.
|
|||
|
||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 3 Всего: 17 |
а так буит работать?
в какой-то умной книге читал, что-то типа такого: если вы решили, что вам нужно знать/получать тип объекта (это касается и того, если вы в самом объекте храните его тип), задумайтесь! и используйте виртуальные функции. а чуда нету, потому что тип void использовать нельзя *(void*) = void я правда хз, будет ли typeid работать с указателями вообще, и с указателем void* вчастности Это сообщение отредактировал(а) korian - 13.3.2008, 00:12 |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
С dynamic_cast действительно проканало, теперь я нереально буду рулить с указателями на базе MyBaseForAll.
"Нафиг нужна музыкальная школа, когда есть пример Паганини Никколо" © Ленинград Я теперь в MyBaseForAll могу запихнуть хоть void * членом класса. Это сообщение отредактировал(а) SABROG - 13.3.2008, 00:17 |
|||
|
||||
| Hehe |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 18.3.2008 Репутация: нет Всего: нет |
Используй CLR и будет тебе счастье =) Ну во всяком случае - гемора меньше. =)
Это сообщение отредактировал(а) Hehe - 18.3.2008, 04:53 |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
так к слову...
то-есть чтобы чудо произошло, нужно, что-бы у класса была хотя-бы одна виртуальная функция |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Я отказался от rtti, если компилятор создает сам таблицы и шарит по ним, то какой в этом смысл, если я могу делать тоже самое и со своей оптимизацией и уже никто не сможет отключить rtti у компилятора и сделать тем самым нерабочую программу.
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
если у тебя в коде используется dynamic_cast, то ты уже полюбому от RTTI зависишь
|
|||
|
||||
| SABROG |
|
||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Нет, не используется. Я просто вернулся к тому с чего начал, пихаю в итемы листбокса пару QPair<int, rootClass>, где int это Enum определяющий тип параметра, а rootClass корень дерева. В итоге, по смыслу, получается нечто вроде этого:
Только мне кажется Qt зависит, т.к. я вижу ключ -rtti при компиляции. Это сообщение отредактировал(а) SABROG - 18.3.2008, 11:39 |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |