Этюд по Си++
Недавно побился об заклад с коллегами, что следующая задача решаема (разумеется, спор я выиграл). Задача и впрямь довольно интересная. Прошу в комменты со своими решениями, комменты скринятся. Через неделю открываю комменты и публикую своё решение.
Нужно написать на Си++ (не выходя за пределы стандартных средств) класс с членами-properties, т.е. класс C, такой, чтобы использующему его коду казалось, будто в нём есть public-атрибут int x, т.е. чтобы для объекта a данного класса имело смысл и являлось lvalue выражение a.x, как, например,
a.x = 0;
cout << a.x;
При этом никакого члена public: int x в классе в помине нет. Невидимым для пользовательского кода образом всякий раз для выборки и установки значения x вызываются методы int getX( void ) и void setX( int ).
Иными словами, нужно исхитриться так, чтобы выражение a.x было законным lvalue, но его вычисление в правой и левой части присваивания вызывало методы getX и setX.
Решения на основе макросов не предлагать.
UPD (по дельному комментарию читателя). По условию пари от объекта требовалось сымитировать лишь возможность взять и установить значение атрибута, прочие возможности работы с этим воображаемым атрибутом класс моделировать не обязан.
UPD2. Открыл комментарии. Своего решения уже не выкладываю, поскольку оно (с точностью до нескольких малозначительных деталей) найдено сразу несколькими участниками
Нужно написать на Си++ (не выходя за пределы стандартных средств) класс с членами-properties, т.е. класс C, такой, чтобы использующему его коду казалось, будто в нём есть public-атрибут int x, т.е. чтобы для объекта a данного класса имело смысл и являлось lvalue выражение a.x, как, например,
a.x = 0;
cout << a.x;
При этом никакого члена public: int x в классе в помине нет. Невидимым для пользовательского кода образом всякий раз для выборки и установки значения x вызываются методы int getX( void ) и void setX( int ).
Иными словами, нужно исхитриться так, чтобы выражение a.x было законным lvalue, но его вычисление в правой и левой части присваивания вызывало методы getX и setX.
Решения на основе макросов не предлагать.
UPD (по дельному комментарию читателя). По условию пари от объекта требовалось сымитировать лишь возможность взять и установить значение атрибута, прочие возможности работы с этим воображаемым атрибутом класс моделировать не обязан.
UPD2. Открыл комментарии. Своего решения уже не выкладываю, поскольку оно (с точностью до нескольких малозначительных деталей) найдено сразу несколькими участниками
