Отслеживание изменений ссылок для обновления исходного класса

#c #reference

#c #ссылка

Вопрос:

Это минимальный пример

 class test
{
private:
    std::vector<double> values;
    double max;

public:
    double at(int i) const {return values[i];}
    doubleamp; at(int i) {return values[i];}
}
 

Я часто использую свой второй метод для изменения некоторых значений вектора в классе.
Мой вопрос: «Есть ли способ обновлять max каждый раз, когда я изменяю свой вектор благодаря ссылке, без изменения прототипа метода». Я знаю, что вместо этого я мог бы использовать функцию setter, но я хочу знать, есть ли возможность обойтись без.

Комментарии:

1. Вы можете подсчитать, сколько раз вызывается вторая перегрузка, но я не думаю, что есть какой-либо способ узнать, действительно ли вызывающий объект изменил ссылку или нет.

2. Это довольно широкий вопрос. В прошлом я решал эту проблему с помощью шаблона observer. Вы бы обернули свой double в тип, который будет выдавать какое-то событие при модификации. Затем ваш тестовый класс подписывается на это событие для каждого добавленного элемента.