|
3 / 26 / 9
Регистрация: 29.08.2010
Сообщений: 204
|
||||||
Как вернуть обьект тип которого заранее неизвестно14.02.2012, 23:56. Показов 4279. Ответов 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 | |
|
Как вставить ряд данных, если заранее неизвестно сколько будет значений ? Как выгрузить из ресурсов текстовый файл, если имя его заранее неизвестно ? Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип, а не ссылка на обьект! Разработать класс, обьект которого реализует "пользовательский" тип данных Как возможно вернуть из функции обьект? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|