Image

Imageratibor_vv wrote in Imageru_cpp

Listens: Venceremos

Categories:

Этюд по Си++

Недавно побился об заклад с коллегами, что следующая задача решаема (разумеется, спор я выиграл). Задача и впрямь довольно интересная. Прошу в комменты со своими решениями, комменты скринятся. Через неделю открываю комменты и публикую своё решение.

Нужно написать на Си++ (не выходя за пределы стандартных средств) класс с членами-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. Открыл комментарии. Своего решения уже не выкладываю, поскольку оно (с точностью до нескольких малозначительных деталей) найдено сразу несколькими участниками