cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

Новое служебное слово #541

Closed mitya-y closed 1 year ago

mitya-y commented 1 year ago

Новое служебное слово для объявления переменых в классе, которые доступны как константы вне класса, и как обычные не const в методах самого класса.

Данное решение будет очень удобным для реализации SOLID идеалогии. Сейчас програмисты вынуждены писать так:

class A { int x; ... public: const int & GetX( void ); } ... A a; int x = a.GetX();

На обертку каждой переменной класса в больших проектах уходит большое количество времени. Намного удобнее написать одно служебное слово (например extconst (external const))

class A { public: extconst int x; ... A( int n) { x = n; } } ... A a; int x = a.x; a.x = 10; // ошибка компиляции

vtopunov commented 1 year ago

Можно так


class A
{
public:
    class AInt
    {
        friend class A;

    public:
        operator int() const
        {
            return value_;
        }

    private:
        AInt(int value) 
            : value_{ value }
        {}

        AInt& operator = (int value)
        {
            value_ = value;
            return *this;
        }

    private:
        int value_;
    };

    A() : x(0)
    {}

    A(int n)
        : A()
    {
        x = n;
    }

    AInt x;
};

int main()
{
    A a;
    int x = a.x;
    a.x = 10;  // ошибка компиляции

    return 0;
}
vtopunov commented 1 year ago

Но вообще сама идея выглядит как костыль. Здесь будут уместнее property

klappdev commented 1 year ago

Идея по добавлению property в язык ранее обсуждалась https://github.com/cpp-ru/ideas/issues/522

apolukhin commented 1 year ago

Согласен, очень похоже на идею с property https://github.com/cpp-ru/ideas/issues/58, предлагаю продолжить обсуждение там