Минимальный пример runnable
#include
class C {
public:
int i;
C(int i) : i(i) {}
int m(int j) { return this->i + j; }
};
int main() {
// Get a method pointer.
int (C::*p)(int) = &C::m;
// Create a test object.
C c(1);
C *cp = &c;
// Operator .*
assert((c.*p)(2) == 3);
// Operator ->*
assert((cp->*p)(2) == 3);
}
Вы не можете изменить порядок скобок или опустить их. Следующие не работают:
c.*p(2)
c.*(p)(2)
C ++ 11 standard
.*
и ->*
- сингенные операторы , введенные в C ++ для эта цель и не представлена в C.
C ++ 11 N3337 стандартная черновик :
.*
и ->*
.