Моя цель - запустить приемник событий при изменении значения в классе.Мое решение этого заключается в использовании функций get и set.Тем не менее, я не хочу никаких проблем с производительностью при чтении значений.В классе ниже:
class Vertex {
public:
const double& GetX() { return _x; } // should inline automatically
const double& GetY() { return _y; } // ' ' ' '
void SetX(const double& x); // complex stuff in source file
void SetY(const double& y); // ' ' ' '
private:
double _x, _y;
}
Я поместил определение геттеров в заголовочные файлы, потому что это должно позволить им быть встроенными.
Мой вопрос: есть ли способавтоматически вызывать функцию при изменении значения, которое не требует от меня включения определений функций в заголовочный файл?Или, возможно, существует уровень видимости, который позволяет любому читать данные, но только сам класс может их изменять?Или, может быть, что-то еще?
Я знаю, что альтернативный подход будет вручную вызывать функцию обновления, но это выглядит некрасиво:
vertex.X = 5;
vertex.Update();
Заранее благодарю.1013 * Редактировать:
До сих пор я слышал несколько замечательных ответов.Решение зависит от вашей цели:
- Легко: добытчики и установщики;хотя и не очень чистый.
- Clean: класс свойств (или прокси);Однако реализовать операторы не так просто.
Однако как насчет эффективности?
Я только что разработал хороший трюк для отдельных разрешений на чтение / запись, о которых я говорил ранее:
class Vertex {
public:
Vertex(double x, double y)
: _x(x), _y(y), X(_x), Y(_y) { } // defined here for readability
void SetX(double x) { _x = x; update(); } // defined here for readability
void SetY(double y) { _y = y; update(); } // update would be the callback
const double& X, Y;
private:
double _x, _y;
}