#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
в тип, который будет выдавать какое-то событие при модификации. Затем ваш тестовый класс подписывается на это событие для каждого добавленного элемента.