![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
![]()
В конечном итоге я конечно сделал так:
Код:
Так что, как бы, ничего криминального... |
![]() |
![]() |
![]() |
#12 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Эм... а как следует использовать данную конструкцию?
|
![]() |
![]() |
![]() |
#13 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
![]()
В одной из работ мне нужно было создать иерархию классов имеющих в основе один базовый, и при этом осуществить как down-cast, так и up-cast между ними.
Оператор dynamic_cast в этом случае не помогал. Ну, а _stamp просто одна из впомогательных функций, выдающая уникальный номер для класса в параметре шаблона. |
![]() |
![]() |
![]() |
#14 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Идею не вполне угадываю. Наверное, потому что не вижу всю картинку в "целом"
А так вообще, для динамической идентификации типов (а так же для статической проверки "особенностей" типа), лично я использую объекты-мемберы безымянных статических структур. С их помощью можно передать сколько угодно полную информацию о строении самого класса (теоретически можно, но на практике использовать динамические классы, поддерживающие эффект рефлексии на с++ мне просто ни разу так и не понадобилось), а так же передавать спецификацию класса. Спецификация класса - это способность класса поддерживать те, или иные операции/возможности. Я назвал такую технику "контракты". И чаще всего использую для определения внутри одного объекта, поддерживает ли пришедший через аргумент-указатель объект требуемые контракты в рантайме (для полиморфных), либо через шаблонный метод-мембер времени компиляции. Как бы... идеологически, я считаю, что все, имеющие отношение к той или иной конкретной абстракции должно быть внутри самой абстракции. И стараюсь не использовать никаких вспомогательных внешних механизмов. Ну и плюс кучка дополнительных функций-утилит поставляются отдельно от класса, автоматизируя некоторые рутинные операции, которые можно выполнять с объектами класса, через его паблик интерфейс. |
![]() |
![]() |
![]() |
#15 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
![]()
Я видел посты где Вы описывали это. Интересно.
У меня была довольно геморная задача. Воду лить не стану, но пришлось писать "с-нуля" весь кастинг иерархии и освобождение от циклических ссылок с обходом периметра. При этом объекты должны иметь только публичные интерфейсные методы или публичные поля в виде других объектов и поддерживать бейсикоподобный синтаксис типа: Код:
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как можно заменять "запятая" на "Enter" | Silent-cry | Microsoft Office Word | 4 | 26.01.2018 12:03 |
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. | воваава | Помощь студентам | 3 | 01.12.2011 12:50 |
Как обойти "преобразование типа из "string" в "float" невозможно" | lexluter1988 | Помощь студентам | 1 | 07.08.2010 12:23 |
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" | aleksei78 | Microsoft Office Excel | 13 | 25.08.2009 12:04 |