Возможный дубликат:
Как перегрузить оператор - ›*?
Что означает оператор ->*
?
а чем он может пригодиться в перегрузке?
Возможный дубликат:
Как перегрузить оператор - ›*?
Что означает оператор ->*
?
а чем он может пригодиться в перегрузке?
Операторы ->*
и .*
предназначены для доступа к членам класса через указатели, примеры см. По следующей ссылке:
http://c-for-crogrammers.org.ua/ch22lev1sec6.html
Вы также можете найти этот ответ SO полезным.
operator->*
предназначен для указателей на членов.
struct foo{
void bar(){}
};
int main(){
typedef void (foo:*foo_memptr)();
foo_memptr pfunc = &foo::bar;
foo f;
foo* pf = &f;
(f.*pfunc)(); // on object or reference
(pf->*pfunc)(); // on pointer to object
}
Перегрузка обычно только полезна для интеллектуальных указателей, и даже они этого не делают, потому что это действительно сложно, и такая же функциональность может быть достигнута с помощью ((*pf).*pfunc)()
. Скотт Мейерс даже написал PDF-файл о том, как это сделать!
operator->*
определяет бинарный оператор точно так же, какoperator+
,operator*
и т. Д. Он имеет более высокий приоритет, чем все другие бинарные операторы, поэтому он полезен при формировании доступа к членам, но ниже, чемoperator[]
. Многие считают, что это непонятно и может сбить с толку пользователей. - person Potatoswatter   schedule 04.01.2012