![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
itan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.7.2006 Репутация: нет Всего: нет |
Предположим у меня есть функция, которая может возвращать указатели разных типов, приведенные к int:
Какой cast надо использовать, чтобы узнать какой имеено тип указателя вернулся? |
|||
|
||||
Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
Эта информация в стеке не сохраняется. или возвращай структуру, содержащую тип указателя, либо запоминай, что передал в точке вызова. ЗЫ Возвращай хотя бы void*. А то Int как то странно выглядит в этой роли ЗЗЫ если включен RTTI - dynamic_cast может помочь Это сообщение отредактировал(а) Sartorius - 18.12.2007, 14:26 |
|||
|
||||
zkv |
|
||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
чтобы узнать, как-то так:
если только привести, то reinterpret_cast. |
||||
|
|||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Ну, а если типы не имеют общего полиморфного базового типа, то можно воспользоваться механизмом исключений:
Здесь, правда, кроются другие грабли - во-первых, т.к. механизм исключений используется не по назначению, то может появится нехилый оверхэд, во-вторых, если типы всё же имеют общий базовый, то расставив catch в неправильном порядке, можно получить не совсем то поведение, на которое расчитывалось ![]() Добавлено через 58 секунд Что-то я туплю - тут же boost::any - то что доктор прописал ![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
archimed7592, ты зачем человека пугаешь?
![]() спрашивали ж, какой каст... |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
В общем случае такого каста нет, как и было сказано выше ![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
нда, не вчитался в вопрос...
itan, если уж извращаешься, то ты ведь САМ задаешь, какой указатель вернется, зачем его тебе определять? кстати, 200% ты чего-то неправильно представляешь и твоя задача решается намного проще |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |