//
//  main.cpp
//  FunctionPointers
//
//  Created by Robert Metcalfe on 16/05/13.
//  Copyright (c) 2013 Robert Metcalfe. All rights reserved.
//

#include <iostream>
#include <sstream>

class FunctionPointers
{
public:
    int intvalue = 1;
    double doublevalue = 2.1;
    long longvalue = 3;
    void function1() { std::stringstream out; out << intvalue; std::cout << out.str() << std::endl; }
    void function2() { std::stringstream out; out << doublevalue; std::cout << out.str() << std::endl; }
    void function3() { std::stringstream out; out << longvalue; std::cout << out.str() << std::endl; }
    typedef void (FunctionPointers::*function_t)();
    static const function_t funcArr[3];
};

const FunctionPointers::function_t FunctionPointers::funcArr[3] = { &FunctionPointers::function1, &FunctionPointers::function2 ,
     &FunctionPointers::function3 
};

int main() {
  FunctionPointers my_FunctionPointers;
  for (int i = 0; i < 3; i++)
  {
      std::mem_fun(FunctionPointers::funcArr[i])(&my_FunctionPointers);
      my_FunctionPointers.intvalue++;
      my_FunctionPointers.doublevalue++;
      my_FunctionPointers.longvalue++;
  }
  return 0;
}
