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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Только для извращенцев! Головоломка, а может и нет... классы, методы, поля 
:(
    Опции темы
Mayk
Дата 12.7.2005, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(comcon1 @ 12.7.2005, 13:25)
А почему property не вносят в стандарт языка?? Ведь в Borland-e вполне себе работает. И синтаксис очень красивый.

Попробуй в борланде прописать что-нить типа Width=Height=640. Он тебе по рукам даст.




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
comcon1
Дата 12.7.2005, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

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



И правильно сделает. Нельзя мне позволять так писать. smile


--------------------
PM MAIL   Вверх
Mayk
Дата 12.7.2005, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(comcon1 @ 12.7.2005, 13:40)
И правильно сделает. Нельзя мне позволять так писать. smile

Это еще почему? Гораздо легче написать вместо
Код

if(userWantToDisableManyElements()){
    Edit1->Enabled = false;
    Edit2->Enabled = false;    
} else 
    Edit1->Enabled = true;
    Edit2->Enabled = true;    
}

написать
Код

Edit1->Enabled=Edit2->Enabled=!userWantToDisableManyElements();

Но с боралндовскими проперти так низзя smile А хочется.

Это сообщение отредактировал(а) Mayk - 12.7.2005, 12:49


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
comcon1
Дата 12.7.2005, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

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



Мда. Мне-то такие выкруты не нравятся. Но их запрет говорит о том, что как с обычным оператором "=", там с property не поработешь. Зяль. Придется перегружать "=" и дальше.

ЗЫ. (я в борланде писал давно, тогда не замечал).


--------------------
PM MAIL   Вверх
ManiaK
Дата 12.7.2005, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

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



Кстати, это всё издержи языка. С точки зрения разработчика компилятора я не вижу трудностей в создании access-функций к переменным, замаскированных под эти же переменные. Или как перегруженый оператор просто...
PM MAIL WWW   Вверх
Ivan.
Дата 5.9.2007, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Все это красиво, но, мутаторы вызываются либо без this (static метод) либо каждый property должен хранить указатель родителя. А это соответственно, недостаток либо не целесообразно.


Это сообщение отредактировал(а) Ivan. - 5.9.2007, 09:39


--------------------
Я могу ВСЁ, вопрос - сколько времени у меня это займет!
PM MAIL ICQ   Вверх
Ivan.
Дата 5.9.2007, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В Builder МОЖНО писать Width = Height = 0, если написать нормально property
Код

protected:
      int __fastcall SetHeight(int Value);
public:
      __property int Height = { read = FHeight, write = SetHeight };


Это сообщение отредактировал(а) Ivan. - 5.9.2007, 09:45


--------------------
Я могу ВСЁ, вопрос - сколько времени у меня это займет!
PM MAIL ICQ   Вверх
UnrealMan
Дата 5.9.2007, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(comcon1 @  12.7.2005,  13:25 Найти цитируемый пост)
А почему property не вносят в стандарт языка?? 

Видимо, потому, что считают их внесение бессмысленным. И я с этим согласен.
PM MAIL   Вверх
JackYF
Дата 5.9.2007, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Некрофилы smile

По сабжу я согласен с Earnest:

Цитата(Earnest @  4.7.2005,  08:54 Найти цитируемый пост)
Когда программист видит в коде выражение a = b, то он имеет право предполагать, что либо присваивание произойдет, либо будет исключение. А тут - либо присвоит, либо нет ... Такого рода действия нужно прямо выражать в коде, и не оператором, а функцией с "говорящим" названием типа TryToAssign.

ППКС.



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


Опытный
**


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

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



Цитата(JackYF @  5.9.2007,  17:36 Найти цитируемый пост)
Некрофилы

Думаешь, все смотрят на даты? smile Я думал, что топик новый smile
PM MAIL   Вверх
Ivan.
Дата 21.5.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я "решил" более красивый, правдо не совсем рабочий, выриант. Помогите довести его до ума.
Код

template <class TObj, class TVal, TVal (TObj::*Get)(), TVal (TObj::*Set)(TVal), int OffSet>
class TProperty
{
public:
    inline operator TVal() {return (((TObj*)((char*)this - OffSet))->*Get)();}
    inline TVal operator = (TVal Val) {return (((TObj*)((char*)this - OffSet))->*Set)(Val);}
};
//
class T
{
    int FVal;
    int GetVal()        {return FVal;}
    int SetVal(int Val) {return FVal = Val;}
public:
    TProperty<T, int, &GetVal, &SetVal, (int)&((T*)NULL)->Val> Val;
};

Приимущества такой реализации:
- вызов мутаторов с this-ом равным объекту хозяина;
- отсутствие дополнительных переменных (типа указателя на Object);
- отсутствие конструкторов, диструкторов;
- кратчайший код выполнения, решаемый еще на этапе компиляции;
- мозможность наследия класса хозяина от базового (тоесть класс T может не являтся суперклассом);
- доступ к полю из класса хозяина (FVal).
Недостатки:
- не совсем красивая инициализация;
- грязноватый хак в плане взятия адреса хозяина (   (TObj*)((char*)this - OffSet)   );
Ошибки:
- строка TProperty<T, int, &GetVal, &SetVal, (int)&((T*)NULL)->Val> Val; ругается на то, что поле Val еще не определено.

Помогите решить эту ошибочку ^^^ smile 


--------------------
Я могу ВСЁ, вопрос - сколько времени у меня это займет!
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0696 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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