|
3 / 26 / 9
Регистрация: 29.08.2010
Сообщений: 204
|
||||||
Как вернуть обьект тип которого заранее неизвестно14.02.2012, 23:56. Показов 4590. Ответов 33
Метки нет (Все метки)
решил поучить паттерны, застрял малость на одном, а точнее на его реализации, паттер называеться Вариант, смысл его, убрать типизацию...
понятно что мы создаем функцию которая возвращает обьект, но мы ж незнаем тип обьект...
0
|
||||||
| 14.02.2012, 23:56 | |
|
Ответы с готовыми решениями:
33
Как обрезать строку? значение переменной MyStr заранее неизвестно. |
|
Заблокирован
|
||
| 15.02.2012, 23:20 | ||
|
Тем более под чутким руководством компилятора. Зачем одну и ту же информацию, известную на стадии компиляции дублировать во всех объектах класса?
0
|
||
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
||
| 15.02.2012, 23:20 | ||
|
поэтому естественно указатель на vtable носится каждым объектом
1
|
||
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|||||||
| 15.02.2012, 23:22 | |||||||
|
даже для кода
0
|
|||||||
|
Заблокирован
|
|
| 15.02.2012, 23:24 | |
|
[QUOTE=alex_x_x;2494010]с каких пор компилятор может знать тип полиморфного объекта в рантайме?
typeid же знает. Чего ж компилятору тогда не знать то?
0
|
|
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
| 15.02.2012, 23:26 | |
|
typeid для классов с виртуальными функциями работает примерно так же как и подбор правильной виртуальной функции. возможно указатель на правильный тайпайди находится в таблице виртуальных функций и компилятор в случае, когда тайпайди вызывается для указателя или ссылки такого вот класса, вставляет код, который шарится по таблице и ищет правильный тайпайди.
0
|
|
|
Заблокирован
|
||
| 15.02.2012, 23:35 | ||
|
Я искал информацию. Нашел какую то запись у Страуструпа, где он сообщал, что технически подобная возможность заложена в компиляторы, но не предоставлена в пользование самим программистам, просто потому, что это противоречит духу с++, и что бы программисты на с++ этой возможностью не злоупотребляли. В итоге, на с++ невозможно сделать красивую рантайм идентификацию типов. И приходится городить огород из всяких фабрик. А если и есть какая более менее полноценная рантайм идентификация - только исключительно в качестве расширения отдельных компиляторов. И с typeof такая же история.
0
|
||
|
3 / 26 / 9
Регистрация: 29.08.2010
Сообщений: 204
|
|
| 15.02.2012, 23:52 [ТС] | |
|
Ребята вопрос вначале темы совсем не об этом был
0
|
|
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
| 15.02.2012, 23:55 | |
|
почитайте как устроет boost::variant или boost::any
может навет на какие-нибудь мысли.
0
|
|
|
Заблокирован
|
|||||||
| 15.02.2012, 23:59 | |||||||
|
Можно: 1. Хардкорно ручками прописать приведение типа к нужному тебе типу. 2. Юзать виртуальный полиморфизм. Но тогда сам по себе контейнер variant абсолютно бесполезен. С таким же успехом можно просто держать указатель на базовый класс. Сам по себе паттерн для с++ бесполезный. И весь твой код, описанный в сабже я могу сократить без потери смысла до:
зы: пока к с++ не приделают нормальную рантайм идентификацию, которой можно было бы красиво пользоваться, все эти variant и any - как рыбке зонтик.
1
|
|||||||
|
3 / 26 / 9
Регистрация: 29.08.2010
Сообщений: 204
|
|
| 16.02.2012, 00:02 [ТС] | |
|
0
|
|
|
Заблокирован
|
||||||
| 16.02.2012, 00:07 | ||||||
|
Можно вычислить тип не_полиморфного объекта, при условии, что тип объекта прошёл процедуру регистрации. Регистрация осуществляется времени компиляции. (поэтому в рантайме потерь производительности практически не будет).
Метод костыльный. Своего рода кривоватый аналог typeof который не умеет работать с полиморфными объектами. то есть можно написать так:
0
|
||||||
|
3 / 26 / 9
Регистрация: 29.08.2010
Сообщений: 204
|
|
| 16.02.2012, 00:17 [ТС] | |
|
можете объяснить что такое полиморфный объект?
0
|
|
|
Заблокирован
|
|
| 16.02.2012, 00:23 | |
|
0
|
|
|
3 / 26 / 9
Регистрация: 29.08.2010
Сообщений: 204
|
|
| 16.02.2012, 00:28 [ТС] | |
|
понятно)
0
|
|
| 16.02.2012, 00:28 | |
|
Как вставить ряд данных, если заранее неизвестно сколько будет значений ? Как выгрузить из ресурсов текстовый файл, если имя его заранее неизвестно ? Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип, а не ссылка на обьект! Разработать класс, обьект которого реализует "пользовательский" тип данных Как возможно вернуть из функции обьект? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|