На самом деле лучшее дополнение для разработчиков к IE было бы Скрипач . Это имеет много функций, которыми обладают другие браузеры.
Перегруженный оператор -> *
является бинарным оператором (тогда как . *
не перегружен). Он интерпретируется как обычный бинарный оператор, поэтому в вашем исходном случае, чтобы вызвать этот оператор, вам нужно сделать что-то вроде
A a;
B* p = a->*2; // calls A::operator->*(int)
. То, что вы читаете в ответе Петра, применяется к встроенным операторам , не к вашему перегруженному. То, что вы вызываете в добавленном вами примере, также является встроенным оператором , а не вашим перегруженным. Чтобы вызвать перегруженного оператора, вам нужно сделать то, что я делаю в моем примере выше.
Так же, как . *
, -> *
используется с указателями на члены. В C ++ FAQ LITE есть целый раздел , посвященный указателям на члены.
#include <iostream>
struct foo {
void bar(void) { std::cout << "foo::bar" << std::endl; }
void baz(void) { std::cout << "foo::baz" << std::endl; }
};
int main(void) {
foo *obj = new foo;
void (foo::*ptr)(void);
ptr = &foo::bar;
(obj->*ptr)();
ptr = &foo::baz;
(obj->*ptr)();
return 0;
}
Как и любой другой оператор, вы также можете вызвать его явно:
a.operator->*(2);