Re[7]: Пропертя
От: jazzer Россия Skype: enerjazzer
Дата: 11.05.12 07:13
Оценка: +1
Здравствуйте, Mystic, Вы писали:

J>>>>эти рекламируемые сайд-эффекты я видел полраза в жизни на тысячи раз, когда я видел пустые сеттеры-геттеры безо всяких сайд-эффектов.

M>>>GUI
J>>Это плохой метод работы с GUI

M>А как по мне, в Delphi и BCB он был очень неплох


Ага, пока не попытаешься повесить проверки типа один параметр должен быть больше другого и какой-нть пересчет по изменению.
Все такие вещи лучше иметь прописанными явно, а не быть закопанными где-то в сеттерах.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[17]: КЫВТ GUI—надо быть проще
От: о_О
Дата: 11.05.12 07:19
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Мне вот лично сигналы с несколькими динамическими подписчиками подписчиками понадобились за все время ровно один раз, а все остальное время рулил простой как валенок boost::function.

это удобно в MVP, MVC

о_О>>Якобы тяжесть этого механизма?

J>Якобы? Поддержка многопоточности и подписки/отписки у нас теперь бесплатна?
не обязательно их делать потокобезопасными. я бы сказал, что это лишнее

о_О>>Всё это цветочки, по сравнению с бустом, в котором потокобезопасные сигналы быстрее обычных (академики постарались).

J>Быстрее простого boost::function? (это я так напоминаю, что ты все хочешь в function засунуть.)
я хочу отдельный встроенный тип delegate, например как в C#, дающий хороший байткод, и дедукцию компилятором (сотни ошибок bind при малейшей ошибки уже достали)

J>А то, что они быстрее первых сигналов — так там соображения обратной совместимости не позволили это дело улучшить, а иначе все сделали бы в рамках первых сигналов. Что никак не отменяет простого факта, что девайс с блокировками на борту в приципе не может быть быстрее такого же без каких-либо блокировок.

буст — не для эффективности, она для понтов (академики довольны). но кол-во абстракций и сущностей в библиотеке мне интересует в последнюю очередь.
Re[15]: КЫВТ GUI—надо быть проще
От: о_О
Дата: 11.05.12 07:21
Оценка:
Здравствуйте, enji, Вы писали:

E>Замени delegate на boost::signal2 + boost::bind и будет тебе счастье

нету счастья
Re[18]: КЫВТ GUI—надо быть проще
От: enji  
Дата: 11.05.12 13:29
Оценка:
Здравствуйте, о_О, Вы писали:

о_О>>>Всё это цветочки, по сравнению с бустом, в котором потокобезопасные сигналы быстрее обычных (академики постарались).

J>>Быстрее простого boost::function? (это я так напоминаю, что ты все хочешь в function засунуть.)
о_О>я хочу отдельный встроенный тип delegate, например как в C#, дающий хороший байткод, и дедукцию компилятором (сотни ошибок bind при малейшей ошибки уже достали)

Кстати насчет кода — мне кажется, жить стало бы сильно веселей, если бы можно было взять указатель на член как просто указатель на функцию (+ this). Т.е. был бы встроенный тип данных, который бы содержал собственно указатель на функцию и указатель на объект:
struct S
{
  virtual void f()
};

struct C : S
{
  void f();
};

typedef void (### PF)();

S* s = new C;

PF pf = &s->f; // тут генерируется код, который лезет в vtbl и находит C::f()

pf(); // в pf лежат два указателя - адрес C::f и s. В результате произойдет вызов s->C::f()


По идее для компилятора это особых сложностей не представляет, и вызов такой штуки будет эквивалентен вызову обычной функции по указателю. Даже если вызов функции-члена отличается от вызова обычной функции — компилятор может молча сделать переходник и сохранить указатель на него.

Так как этого нет, то приходится делать руками на уровне библиотеки — через шаблоны и виртуальные функции...
Re[19]: КЫВТ GUI—надо быть проще
От: о_О
Дата: 11.05.12 13:40
Оценка:
Здравствуйте, enji, Вы писали:

E>Кстати насчет кода — мне кажется, жить стало бы сильно веселей, если бы можно было взять указатель на член как просто указатель на функцию (+ this). Т.е. был бы встроенный тип данных, который бы содержал собственно указатель на функцию и указатель на объект

не сыпь мне соль на рану...
Re[19]: КЫВТ GUI—надо быть проще
От: Vamp Россия  
Дата: 11.05.12 13:46
Оценка:
E>Кстати насчет кода — мне кажется, жить стало бы сильно веселей, если бы можно было взять указатель на член как просто указатель на функцию (+ this). Т.е. был бы встроенный тип данных, который бы содержал собственно указатель на функцию и указатель на объект
Ну, bind + mem_fun спасут отца русской демократии, нет?
Да здравствует мыло душистое и веревка пушистая.
Re[19]: КЫВТ GUI—надо быть проще
От: Abyx Россия  
Дата: 11.05.12 13:50
Оценка: 1 (1)
Здравствуйте, enji, Вы писали:

E>мне кажется, жить стало бы сильно веселей, если бы можно было взять указатель на член как просто указатель на функцию (+ this). Т.е. был бы встроенный тип данных, который бы содержал собственно указатель на функцию и указатель на объект:


в Borland С++ это называется __closure
In Zen We Trust
Re: Пропертя
От: Pavel Dvorkin Россия  
Дата: 12.05.12 09:16
Оценка: +2 :)
Здравствуйте, Kingofastellarwar, Вы писали:

K>почему ни в одном стандарте с++ до сих пор не предложили нормальные пропертя?


Конечно, надо их ввести! А то как-то стыдно. Откроешь какой-нибудь файл на java или C# и пожалуйста — десяток полей, десяток геттеров, десяток сеттеров, сотня строк, выглядит солидно и убедительно. А на С++ позор один — несчастный struct на 10 строк и все. А уж если class, то в нем почти что и нет замечательных методов с телом return x; или this.x = x. Стыд и позор!
With best regards
Pavel Dvorkin
Re[2]: КЫВТ GUI—надо быть проще
От: Pavel Dvorkin Россия  
Дата: 12.05.12 09:21
Оценка:
Здравствуйте, MasterZiv, Вы писали:


MZ>Отвечу коротко и надеюсь ясно: потому что нахрен они никому не нужны.


Добавлю коротко и ясно — они есть в Visual C++ (__declspec(property)) , но никем не используются по той же самой причине.

Вот из MSDN

// declspec_property.cpp
struct S {
   int i;
   void putprop(int j) { 
      i = j;
   }

   int getprop() {
      return i;
   }

   __declspec(property(get = getprop, put = putprop)) int the_prop;
};

int main() {
   S s;
   s.the_prop = 5;
   return s.the_prop;
}
With best regards
Pavel Dvorkin
Re[3]: КЫВТ GUI—надо быть проще
От: icWasya  
Дата: 12.05.12 10:01
Оценка: +2 :)
Здравствуйте, Pavel Dvorkin, Вы писали:

MZ>>... потому что нахрен они никому не нужны.


PD>Добавлю коротко и ясно — они есть в Visual C++ (__declspec(property)) , но никем не используются по той же самой причине.


Они не используются, потому что при переходе на другую платформу придётся всё переписывать
Re[4]: КЫВТ GUI—надо быть проще
От: Pavel Dvorkin Россия  
Дата: 12.05.12 10:38
Оценка:
Здравствуйте, icWasya, Вы писали:


W>Они не используются, потому что при переходе на другую платформу придётся всё переписывать


1. Не все. Но многое, верно.
2. В Visual C++ много есть такого, чего нет в стандарте, но тем не менее используется
With best regards
Pavel Dvorkin
Re[3]: Пропертя
От: Abyx Россия  
Дата: 12.05.12 10:42
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, MasterZiv, Вы писали:


MZ>>Отвечу коротко и надеюсь ясно: потому что нахрен они никому не нужны.


PD>Добавлю коротко и ясно — они есть в Visual C++ (__declspec(property)) , но никем не используются по той же самой причине.


Говорите за себя. Я использую.
In Zen We Trust
Re[4]: Пропертя
От: Pavel Dvorkin Россия  
Дата: 12.05.12 11:17
Оценка:
Здравствуйте, Abyx, Вы писали:

PD>>Добавлю коротко и ясно — они есть в Visual C++ (__declspec(property)) , но никем не используются по той же самой причине.


A>Говорите за себя. Я использую.


Уточняю — практически никем не используются
With best regards
Pavel Dvorkin
Re[4]: Пропертя
От: MasterZiv СССР  
Дата: 12.05.12 13:21
Оценка: +1 :))) :)
> PD>Добавлю коротко и ясно — они есть в Visual C++ (__declspec(property)) , но
> никем не используются по той же самой причине.
>
> Говорите за себя. Я использую.

Значит, ты и есть тот самый Никто!
Люди, мы его нашли! Это он!
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Пропертя
От: Kingofastellarwar Украина  
Дата: 12.05.12 13:35
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, Kingofastellarwar, Вы писали:


K>>почему ни в одном стандарте с++ до сих пор не предложили нормальные пропертя?


PD>Конечно, надо их ввести! А то как-то стыдно. Откроешь какой-нибудь файл на java или C# и пожалуйста — десяток полей, десяток геттеров, десяток сеттеров, сотня строк, выглядит солидно и убедительно. А на С++ позор один — несчастный struct на 10 строк и все. А уж если class, то в нем почти что и нет замечательных методов с телом return x; или this.x = x. Стыд и позор!


как просто у вас, а если вам интерфес нужен а не класс?

class IService
{
public:
   IMemeber Member;
};

class CService : public IService
{
   CMember MemberImpl;

   void InitMember()
   {
       Member = MemberImpl = new CMember(); // такое как? очень красиво когда у вас два мембера за одну и туже сущность отвечает?
   }
   // или мне нада писать этот приватный сеттер для своего же собственного мембера?
private:
   void SetMemeber(CMemeber * m)
   {
       Member = MemberImpl = m;     
   }
};
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[5]: Пропертя
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 12.05.12 14:55
Оценка:
Здравствуйте, MasterZiv, Вы писали:

>> PD>Добавлю коротко и ясно — они есть в Visual C++ (__declspec(property)) , но

>> никем не используются по той же самой причине.
>>
>> Говорите за себя. Я использую.

MZ>Значит, ты и есть тот самый Никто!

MZ>Люди, мы его нашли! Это он!

Мне бы такое зрение. Увидеть Никого, на таком расстоянии, через километры IP-пакетов и десятки файрволлов...
The God is real, unless declared integer.
Re[2]: Пропертя
От: kov_serg Россия  
Дата: 12.05.12 16:48
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, Kingofastellarwar, Вы писали:


K>>почему ни в одном стандарте с++ до сих пор не предложили нормальные пропертя?


PD>Конечно, надо их ввести! А то как-то стыдно. Откроешь какой-нибудь файл на java или C# и пожалуйста — десяток полей, десяток геттеров, десяток сеттеров, сотня строк, выглядит солидно и убедительно. А на С++ позор один — несчастный struct на 10 строк и все. А уж если class, то в нем почти что и нет замечательных методов с телом return x; или this.x = x. Стыд и позор!


В C++ тоже длинные сопли с :: и < > очень радуют академический глаз.

Вообще то назначение пропертей не для большого кол-ва строк. А для удобства и сокращения записи. А то что их используют как попало это уж извиняйте.
— для скрытия реализации
class A {
  List list; // потом могу переделать по другому и в других местах ничего не меняем.
  public void Add(object a) { list.Add(); }
  property int Count { get { return list.Count; } }
}

— Что бы не писать функции getX setX
struct SomeInterface {
  virtual int getX()=0;
  virtual int setX(int x)=0
};

— Для рефакторинга и отладки
было
class A {
  public int X;
};

стало
class A {
  int x;
  public int X { get { return x; }
    set {
      if (value==100) 
         Debug.BreakPoint();
      x=value;
    }
 }
}

— Можно использовать для валидации и оповещении об измении поля.
class A {
  int x;
  Validator validator;
  Notifier notifier;
  public int X { get { return x; }
    set {
      validator.validate(x);
      if (x!=value) {
        x=value;
        notifier.notify_subscribers();
      }
    }
 }
}


при этом из вне синтаксис как к обычному полю a.X=a.X+1;
и внутренние изменения переход от поля к гетерам и сетерам не приводит к изменению остального кода.
Re[20]: Пропертя
От: Erop Россия  
Дата: 12.05.12 18:08
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Такие языки уже есть. Называются Java, .NET. Превращать С++ в Джаву никакого смысла нет, да и стремно — можно нарваться на патентный иск со стороны Оракла.


Почему? Что-то могло бы быть и в С++.

Например, почему бы не иметь возможности работать с типами в СТ, как-то их декоспозицию осуществлять, менять и т. д.
Какие-то такие возможности даёт шаблонная магия, но очень бледные.

Потом рефлексия. Почему бе не дать, хотя бы в СТ возможность проитерировать все методы класса, например?

Вот скажем я хочу написать такой шаблон класса, который автоматом скопирует все публичные методы своегео параметра. Как мне это сделать?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: КЫВТ GUI—надо быть проще
От: Erop Россия  
Дата: 12.05.12 18:18
Оценка: +1
Здравствуйте, icWasya, Вы писали:

W>Они не используются, потому что при переходе на другую платформу придётся всё переписывать


По идее проперти обычно продвигаются, как инструмент разработчика GUI.
А виндовый GUI на другой OS, всё равно переписывать...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: Пропертя
От: Erop Россия  
Дата: 12.05.12 18:21
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>как просто у вас, а если вам интерфес нужен а не класс?


class IService
{
public:
   virtual IMemeber* GetMember() = 0;
};

class CService : public IService
{
   CMember MemberImpl;
   virtual IMemeber* GetMember() { return &MemberImpl; }
};

Коротко, ясно и для интеропа с другими языками лучше приспособленно...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.