У меня есть класс Property
, содержащий данные типа Matrix
и который перегружает операторы ->
, *
и &
, Matrix
будучи еще один класс шахты. Перегрузки обеспечивают прямой доступ к данным, например.Перегружен -> и *: как получить доступ к начальному классу?
Property myProp;
myProp->trace();
Приведенный выше код позволяет вычислить след матрицы непосредственно из Property
, содержащей его, и без того, чтобы сначала получить данные: удобный.
Теперь я хочу добавить обратный вызов к моему Property
, который вызывается, когда обновляется Property
. Для этого я хотел бы, чтобы иметь возможность написать что-то вроде:
myProp->registerCallback(myCallback);
Моя проблема заключается в том, что operator->
возвращает ссылку на Matrix
, следовательно registerCallback
вызывается на классе матрицы, а не на Property
. Поскольку я также перегружал других операторов *
и &
, кажется, что я больше не могу назвать функции-члены от Property
.
Следовательно, мой вопрос: есть ли какой-либо трюк для работы с базовым типом после того, как оператор был перегружен, чтобы вернуть другой тип?
Большое спасибо!
Перегрузка унарного оператора & является одним из тех умных трюков, которые могут принести больше вреда, чем пользы. – fasked