Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое добавление свойств обекту класса 
V
    Опции темы
mes
Дата 22.4.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Graf_h @  22.4.2008,  14:45 Найти цитируемый пост)
Иногда бывает удобно просто прицепить то что мне нужно к отдельному обьекту, а не проектировать  всю иерархию!

 smile 


--------------------
PM MAIL WWW   Вверх
Graf_h
Дата 22.4.2008, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 2
Всего: 5



Код


class Game{
private:
static Game* _self;
Game();
~Game();
public: 
 static Game* Instance()
  {
    if(!_self) _self = new Game();
    return _self;
  }
}
void free(){
delete this; _self=NULL;
}

}

Вот примерно так! просто я начинаю новыйпроект и хочу спроектировать его правильно, просто и быстро! Вот это гарантирует что будет только один обьект! и мне нужно ему цыплять свойства примерно так:

Код

Game *newGame = Game::Instance();

newGame->status=false;
newGame->time =function(){
....
}



Код может быть с ошибками но сама идея понятна!
тоесть что бы сразу можно было вцепить то чт омне по ходу нужно!Эт намного облегчит проектирование smile!

Это сообщение отредактировал(а) Graf_h - 22.4.2008, 16:14


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Kappac
Дата 22.4.2008, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 30.9.2006
Где: Украина, Киев

Репутация: нет
Всего: нет



Код

class foo {
    .......
};

template<class &T> class bar {
       //Необходимые добавки
};

bar<foo> *obj = new bar<foo>();



Примерно так... 

Это сообщение отредактировал(а) Kappac - 22.4.2008, 16:14
--------------------
                                                                                     
PM MAIL ICQ Skype   Вверх
JackYF
Дата 22.4.2008, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Угу. А ещё есть такая штука - указатели на функцию. Динамические донельзя smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Graf_h
Дата 22.4.2008, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 2
Всего: 5



Цитата(JackYF @  22.4.2008,  16:23 Найти цитируемый пост)
Угу. А ещё есть такая штука - указатели на функцию. Динамические донельзя 

То как првильно спроектировать? а то придется все описывать... smile 


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Daevaorn
Дата 22.4.2008, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Lazin @  22.4.2008,  10:33 Найти цитируемый пост)
фи какая гадость...

Я уверен, что для флешера С++ не меньшая гадость. Так что слишком резко.
PM MAIL WWW   Вверх
mes
Дата 22.4.2008, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Graf_h @  22.4.2008,  16:09 Найти цитируемый пост)

Код

class Game{
private:
static Game* _self;
...


Вот примерно так! просто я начинаю новыйпроект и хочу спроектировать его правильно, просто и быстро! Вот это гарантирует что будет только один обьект! и мне нужно ему цыплять свойства примерно так:


Какой ужас! вначале объявить класс синглетоном а только потом его описывать.
"не каждая рыба-селедка, но каждая селедка - рыба"  © Льюис Кэролл 

Код

template <class T> class Singleton: public T ...
template <class T>  class TProperty 
{ public:
      void Set (T& value) { m_value=value; }
     T Get () {return m_value; }
  private:
    T m_value;
};

class CGame {
   public:
        TProperty<int> Status;
};
typedef Singleton<CGame> GameSingleton;



Цитата(Graf_h @  22.4.2008,  16:09 Найти цитируемый пост)
Код может быть с ошибками но сама идея понятна!

smile 



Это сообщение отредактировал(а) mes - 22.4.2008, 17:34


--------------------
PM MAIL WWW   Вверх
Graf_h
Дата 22.4.2008, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 2
Всего: 5



Цитата(mes @  22.4.2008,  17:34 Найти цитируемый пост)
Какой ужас! вначале объявить класс синглетоном а только потом его описывать.

Синглтон это так для страховки! а описывать его незачем! как мне добавить в этот обьект этого класа свойства которые не описаны в класе! вот проблема... smile  

Это сообщение отредактировал(а) Graf_h - 22.4.2008, 17:41


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
mes
Дата 22.4.2008, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Graf_h @  22.4.2008,  17:40 Найти цитируемый пост)
как мне добавить в этот обьект этого класа свойства которые не описаны в класе! вот проблема


Код


class MyDynamicObject
{
    public:
        void AddProperty (const std::string& name, const MyVariant& value) { m_PropertyMap[name]=value; }
        MyVariant GetProperty (const std::string& name) { /*упрошеный вариант*/ return m_PropertyMap[name]; }
    private:
        std::map<std::string,MyVariant> m_PropertyMap;
};


типа такого?
а ты уверене что тебе это облегчит разботку и отладку проги? 
именно поэтому и спрашивал примера твоего представления того что тебе нужно 


--------------------
PM MAIL WWW   Вверх
mes
Дата 22.4.2008, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



 Сейчас прошелся по улице и кажись понял что тебе нужно .. и совсем не динамическое добавление свойств объекту...
тебе нужна именно композиция (кто то уже писал выше)  тогда каждую "маленькую задачу" ты будешь решать отдельно 
не влияя на код остального проекта и при всем этом все маленькие задачи будут одним целым. 



--------------------
PM MAIL WWW   Вверх
Graf_h
Дата 23.4.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 2
Всего: 5



Цитата(mes @  22.4.2008,  18:02 Найти цитируемый пост)
а ты уверене что тебе это облегчит разботку и отладку проги? именно поэтому и спрашивал примера твоего представления того что тебе нужно 


Кода еще нет никакого,я сейчас хочу спроектировать, а уже потом начинать програмировать!Я впринцыпе хорошо знаю ActionScript, и вот что мне в нем нравится, что там я любому обьекту могу прицепить то свойство, которое мне "нравится", например, в AS есть встроенный класс MovieClip со своими свойствами.Но я могу дописать свои даже их не обявляе в классе! Вот я и задумался, можно ли такое сделать на с++,это намного облегчаеть проектирование и розработку!


Цитата(mes @  22.4.2008,  18:23 Найти цитируемый пост)
Сейчас прошелся по улице и кажись понял что тебе нужно .. и совсем не динамическое добавление свойств объекту...тебе нужна именно композиция (кто то уже писал выше)  тогда каждую "маленькую задачу" ты будешь решать отдельно не влияя на код остального проекта и при всем этом все маленькие задачи будут одним целым. 

Нет,нажаль не композиция, я знаю что это такое!Вот маленький пример,того что мне нужно:

Код

class A{
A();
virtual ~A();
}

A a;

a.param1=10;
a.param2=true;
a.param3=-12.5;
a.func()
   


Конечно же при таком создании класса компилятор будет ругатся! вот и вопрос как можно это решить,если вообще возможно


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
mes
Дата 23.4.2008, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Graf_h @  23.4.2008,  09:40 Найти цитируемый пост)
Конечно же при таком создании класса компилятор будет ругатся! вот и вопрос как можно это решить,если вообще возможно 


в с++ обязательно описание должно предшествовать вызову - необходимо это для контроля типов. 
можно реализовать свой класс и вызывать методы по их строковому имени 
Код


A.exec ("method1", params(p1,p2,p3));

но тогда у тебя не будет ни какого контроля со стороны компилятора - поэтому в таких случаях используют не с++,
а языки с динамическим контролем типов

Это сообщение отредактировал(а) mes - 23.4.2008, 09:54


--------------------
PM MAIL WWW   Вверх
Lazin
Дата 23.4.2008, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



есть 2 варианта этой проблемы, расширение свойств класса в compile time и в run time

в compile time решается наследованием, или включением, можно враппер какой-нибудь или декоратор написать и тд

в run time, для этого могут использоваться всякие вариантные типы данных, обобщенные функторы и тд.. но класс, в который ты что-то хочешь добавить, должен быть спроектирован особым образом, лучше в этом случае прикрутить скриптовый движок к программе(python, lua...), и реализовывать бизнес логику на нем  smile 
PM MAIL Skype GTalk   Вверх
mes
Дата 23.4.2008, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Graf_h @  23.4.2008,  09:40 Найти цитируемый пост)
Вот маленький пример,того что мне нужно:

и все таки я больше чем уверен, что ты ищешь причину своих трудностей не там ..

Цитата(mes @  22.4.2008,  15:35 Найти цитируемый пост)
Цитата(Graf_h @  22.4.2008,  14:45 )
Иногда бывает удобно просто прицепить то что мне нужно к отдельному обьекту, а не проектировать  всю иерархию!
   


до сих пор не привел ни одного примера, где тебе необходимо была бы такая возможность ))



Это сообщение отредактировал(а) mes - 23.4.2008, 10:08


--------------------
PM MAIL WWW   Вверх
Graf_h
Дата 23.4.2008, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 2
Всего: 5



Цитата(mes @  23.4.2008,  10:01 Найти цитируемый пост)
до сих пор не привел ни одного примера, где тебе необходимо была бы такая возможность ))

Вот пример:
Код

class Units{
Units()
virtual ~Units()
}

class Bots{
Bots();
virtual ~Bots();
}


больше никаких свойств.Далее:
Код

Units create(_x:float,_y:float){
Units new_Units;
new_Units.moving();
new_Units.fire();
new_Units.posx=_x;
new_Units.posy=_y;
new_Units.orientation;
new_Units.killed=false;
}

далее
Код

Units unit[2];
unit[0]= create(10,100)

Пример может не настолько удачный, но все же...

Это сообщение отредактировал(а) Graf_h - 23.4.2008, 10:19


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2027 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.