Реализация property

octaviarius
octaviarius

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

для сравнения:

class CMyClass{
private:
 int a;
 float b;
public:
////
 
 int getA() {return a;}
 void setA(int value){a = value;}

 float getB() {return b;}
 void setB(float value){b = value;}
};




CMyClass c;

void main(){

 int vInt = 45;
 float vFloat = 3.5;

 c.setA(vInt);
 c.setB(float(c.getA) * vFloat);

 vFloat = c.getB(); 
 
};

 

и вот это:

class CMyClass{
private:
 int a;
 float b;
public:
////
 
 property int A{
  int get(){return a;}
  void set(int value) {a = value;}
 }
 
 property float B{
  float get() {return b;}
  void set(float value){b = value;}
 }
};




CMyClass c;

void main(){

 int vInt = 45;
 float vFloat = 3.5;

 //выглядит культурнее и ближе для восприятия
 c.A = vInt;
 c.B = float(c.A) * vFloat;

 vFloat = c.B; 
 
};

 

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

-4
рейтинг
2 комментария
yndx-antoshkka
Аналогичное предложение: https://stdcpp.ru/proposals/07a6ff30-4f0e-4683-bbaf-4a635eadfb34
yndx-antoshkka
asschool
1) почему бы не использовать PODы если нужен относительно прямой доступ к членам?
Если же нужна инкапсуляция обычно не стоит ваще показывать ВСЕ свое состояние наружу (тем более позволять изменять), этим любят злоупотреблять в джаве и сишарпе
2) метаклассы сделают эту штуку легко имплементируемой
asschool
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения