Один трюк - создать прокси-объект. Это позволяет вам перегрузить оператор присваивания и поместить туда логику отслеживания, а затем вы можете гарантировать, что любые записи будут перехвачены. Если у вас есть
class Proxy
{
int& val;
Proxy(int& val) : val(val) {}
Proxy& operator=(int new_val)
{
// do tracking stuff
val = new_val;
}
operator int() { return val; }
};
, вы можете настроить IntContainer
на
class IntContainer {
public:
int operator[] (size_t i) const;
Proxy operator[] (size_t i);
};
, и теперь вы будете вызывать код отслеживания, когда пользователь фактически пытается присвоить ссылку.