| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Динамическое добавление свойств обекту класса |
| Автор: Graf_h 21.4.2008, 17:29 |
| Как организовать, точнее описать класс, чтобы я каждому обьекту класса мог динамически добавлять методы и члены данных в любом месте своей пргораммы? и что бы они были доступны в любом месте вызова обьекта |
| Автор: Daevaorn 21.4.2008, 17:31 |
| Наследование? |
| Автор: Graf_h 21.4.2008, 17:33 |
В смысле? причем тут наследование |
| Автор: Graf_h 22.4.2008, 09:21 |
| Можна! Например ActionScript! там класы спроектированы так что я могу динамически создавать их методы или члены данных! |
| Автор: Rififi 22.4.2008, 09:31 |
| Graf_h, ActionScript не не является компилируемым языком. а так... можно сделать COM-обьект на основе IDispatchEx |
| Автор: MAKCim 22.4.2008, 09:31 |
| Graf_h, хватит оффтопить! вам уже сказали, что нельзя такое сделать в С++ |
| Автор: Lazin 22.4.2008, 09:33 |
фи какая гадость... Добавлено через 2 минуты и 16 секунд можно добавить к классу динамический массив объектов типа boost::any, и еще один динамический массив объектов типа boost::function< boost::any (boost::any)>, а толку с этого |
| Автор: Graf_h 22.4.2008, 09:52 |
| Всем спасибо! |
| Автор: mes 22.4.2008, 09:57 |
| Ты хочешь писать скрипты или просто собрать класс из разных (уже написанных) функций ? если скрипты- то подключай интерпретируемый язык - луа или питон |
| Автор: Graf_h 22.4.2008, 10:30 | ||
Нет, скрипты я нехочу писать |
| Автор: mes 22.4.2008, 12:05 |
покажи пример предполагаемой тобой функциональности, чтоб представить что ты хочешь |
| Автор: Graf_h 22.4.2008, 14:45 | ||
Это для того чо бы не ломать голову над тем что у меня должен делать обьект! Чтобы я в любой момент мог обьекту прицепиить то поведение какое мне нужно в определеный момент! Например как в ActionScript,кстати насколько я знаю ActioScript спроектирован на C++! вот мне и стало интересно каким способом разработчики этого добились!Кто хоть раз програмировал на AS тот поймет!Иногда бывает удобно просто прицепить то что мне нужно к отдельному обьекту, а не проектировать всю иерархию! |
| Автор: Lazin 22.4.2008, 15:08 |
| Это называется композиция объектов |
| Автор: Alek86 22.4.2008, 15:15 | ||
может, простой динамический полиморфизм тебе поможет? |
| Автор: mes 22.4.2008, 15:35 | ||
|
| Автор: Graf_h 22.4.2008, 16:09 | ||||
Вот примерно так! просто я начинаю новыйпроект и хочу спроектировать его правильно, просто и быстро! Вот это гарантирует что будет только один обьект! и мне нужно ему цыплять свойства примерно так:
Код может быть с ошибками но сама идея понятна! тоесть что бы сразу можно было вцепить то чт омне по ходу нужно!Эт намного облегчит проектирование |
| Автор: Kappac 22.4.2008, 16:11 | ||
Примерно так... |
| Автор: JackYF 22.4.2008, 16:23 |
| Угу. А ещё есть такая штука - указатели на функцию. Динамические донельзя |
| Автор: Graf_h 22.4.2008, 16:25 | ||
То как првильно спроектировать? а то придется все описывать... |
| Автор: Daevaorn 22.4.2008, 17:04 |
Я уверен, что для флешера С++ не меньшая гадость. Так что слишком резко. |
| Автор: mes 22.4.2008, 17:34 | ||||||
Какой ужас! вначале объявить класс синглетоном а только потом его описывать. "не каждая рыба-селедка, но каждая селедка - рыба" © Льюис Кэролл
|
| Автор: Graf_h 22.4.2008, 17:40 | ||
Синглтон это так для страховки! а описывать его незачем! как мне добавить в этот обьект этого класа свойства которые не описаны в класе! вот проблема... |
| Автор: mes 22.4.2008, 18:02 | ||||
типа такого? а ты уверене что тебе это облегчит разботку и отладку проги? именно поэтому и спрашивал примера твоего представления того что тебе нужно |
| Автор: mes 22.4.2008, 18:23 |
| Сейчас прошелся по улице и кажись понял что тебе нужно .. и совсем не динамическое добавление свойств объекту... тебе нужна именно композиция (кто то уже писал выше) тогда каждую "маленькую задачу" ты будешь решать отдельно не влияя на код остального проекта и при всем этом все маленькие задачи будут одним целым. |
| Автор: Graf_h 23.4.2008, 09:40 | ||||||
Кода еще нет никакого,я сейчас хочу спроектировать, а уже потом начинать програмировать!Я впринцыпе хорошо знаю ActionScript, и вот что мне в нем нравится, что там я любому обьекту могу прицепить то свойство, которое мне "нравится", например, в AS есть встроенный класс MovieClip со своими свойствами.Но я могу дописать свои даже их не обявляе в классе! Вот я и задумался, можно ли такое сделать на с++,это намного облегчаеть проектирование и розработку!
Нет,нажаль не композиция, я знаю что это такое!Вот маленький пример,того что мне нужно:
Конечно же при таком создании класса компилятор будет ругатся! вот и вопрос как можно это решить,если вообще возможно |
| Автор: mes 23.4.2008, 09:53 | ||||
в с++ обязательно описание должно предшествовать вызову - необходимо это для контроля типов. можно реализовать свой класс и вызывать методы по их строковому имени
но тогда у тебя не будет ни какого контроля со стороны компилятора - поэтому в таких случаях используют не с++, а языки с динамическим контролем типов |
| Автор: Lazin 23.4.2008, 09:59 |
| есть 2 варианта этой проблемы, расширение свойств класса в compile time и в run time в compile time решается наследованием, или включением, можно враппер какой-нибудь или декоратор написать и тд в run time, для этого могут использоваться всякие вариантные типы данных, обобщенные функторы и тд.. но класс, в который ты что-то хочешь добавить, должен быть спроектирован особым образом, лучше в этом случае прикрутить скриптовый движок к программе(python, lua...), и реализовывать бизнес логику на нем |
| Автор: mes 23.4.2008, 10:01 | ||
и все таки я больше чем уверен, что ты ищешь причину своих трудностей не там ..
до сих пор не привел ни одного примера, где тебе необходимо была бы такая возможность )) |
| Автор: Graf_h 23.4.2008, 10:18 | ||||||||
Вот пример:
больше никаких свойств.Далее:
далее
Пример может не настолько удачный, но все же... |
| Автор: Fazil6 23.4.2008, 10:49 | ||||||
не понимаю чем это удобно...
как это? Один объект на все случаи жизни?
пишешь кучу интерфейсов с нужным поведением каждый и от всех сразу наследуешься. В разных ситуациях юзаешь объект через разных предков. А вообще есть довольно неплохое правило "одна задача - один класс" |
| Автор: vinter 23.4.2008, 11:00 |
| то что ты хочешь это называется антипроектрование. Кстати как ты себе представляешь, что ты понаписывал кучу свойств к объекту? они должны быть где то определены, вот для этого и надо грамотно проектировать, исходя из вариантов использования выделять свойства и методы. Но все равно спроектировать с нуля готовую систему, которую потом можно просто переписать на язык, практически нереально, скорее всего потом столкнешься с какой нибудь трудностью. В процессе реализации |
| Автор: Graf_h 23.4.2008, 12:21 |
| Понятно! всем спасибо за помощь |