//: 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);
} ///:~