Использование Оператора - ›*

Возможный дубликат:
Как перегрузить оператор - ›*?

Что означает оператор ->*?

а чем он может пригодиться в перегрузке?


person Amol Sharma    schedule 03.01.2012    source источник
comment
См. Также stackoverflow.com/questions/2696864/. Я не думаю, что это дубликат вышеупомянутого, но тоже не очень хороший вопрос.   -  person Potatoswatter    schedule 04.01.2012
comment
Я собирался ответить, но вот jist - operator->* определяет бинарный оператор точно так же, как operator+, operator* и т. Д. Он имеет более высокий приоритет, чем все другие бинарные операторы, поэтому он полезен при формировании доступа к членам, но ниже, чем operator[]. Многие считают, что это непонятно и может сбить с толку пользователей.   -  person Potatoswatter    schedule 04.01.2012


Ответы (2)


Операторы ->* и .* предназначены для доступа к членам класса через указатели, примеры см. По следующей ссылке:

http://c-for-crogrammers.org.ua/ch22lev1sec6.html

Вы также можете найти этот ответ SO полезным.

person Andrew Clark    schedule 03.01.2012

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-файл о том, как это сделать!

person Xeo    schedule 03.01.2012