#include <iostream>
#include <cstdio>

using namespace std;

class A {
 public:
  virtual void func() { cout <<  "i: " <<  i_ << endl; }
  void inc() { ++i_; }
  A() { i_=10; }
 private:
  int i_;
};
 
int main() {
  void (A::*p)() = &A::func;
  int size =  sizeof(p)/sizeof(unsigned int);
  cout << "size: " << size << endl;
  unsigned int *t = new unsigned int[size];
  for (int i = 0; i < size; ++i) t[i] = ((unsigned int *)&p)[i];
  void (A::*q)() = *(void (A::**)())t;
  delete [] t;

  A a;
  (a.*q)();
  a.inc();
  (a.*q)();

  A aa;
  (aa.*q)();
  (a.*q)();
  (aa.*q)();

  return 0;
}


