Bruce Eckel's Thinking in C++, 2nd Ed | Contents | Prev | Next |
sp->a; so.a;
sp->*pm = 47; so.*pm = 47;
//: C11:Pmem.cpp // Pointers to members class Widget { public: void f(int); void g(int); void h(int); void i(int); }; void Widget::h(int) {} int main() { Widget w; Widget* wp = &w; void (Widget::*pmem)(int) = &Widget::h; (w.*pmem)(1); (wp->*pmem)(2); } ///:~
//: C11:Pmem2.cpp // Pointers to members #include <iostream> using namespace std; class Widget { void f(int) const {cout << "Widget::f()\n";} void g(int) const {cout << "Widget::g()\n";} void h(int) const {cout << "Widget::h()\n";} void i(int) const {cout << "Widget::i()\n";} enum { count = 4 }; void (Widget::*fptr[count])(int) const; public: Widget() { fptr[0] = &Widget::f; // Full spec required fptr[1] = &Widget::g; fptr[2] = &Widget::h; fptr[3] = &Widget::i; } void select(int i, int j) { if(i < 0 || i >= count) return; (this->*fptr[i])(j); } int Count() { return count; } }; int main() { Widget w; for(int i = 0; i < w.Count(); i++) w.select(i, 47); } ///:~