[ create a new paste ] login | about

Link: http://codepad.org/LJ5MqwEl    [ raw code | fork ]

C++, pasted on Aug 29:
#include <vector>
class Hoge
{
public:
  int x, y;
  bool flag;

  class Statics
  {
  public:
    Statics()
    {
      push_back_member(&Hoge::x);
      push_back_member(&Hoge::y);
      push_back_member(&Hoge::flag);
    }
    template<typename T> void push_back_member(T (Hoge::*p)) { members.push_back(reinterpret_cast<char Hoge::*>(p)); }
    template<typename T> T (Hoge::*nth_member(int n) const) { return reinterpret_cast<T Hoge::*>(members[n]); }
  private:
    std::vector<char Hoge::*> members;
  } static statics;
};
Hoge::Statics Hoge::statics;

#include <cassert>

int main()
{
    assert(Hoge::statics.nth_member<int>(0) == &Hoge::x);
    assert(Hoge::statics.nth_member<int>(1) == &Hoge::y);
    assert(Hoge::statics.nth_member<bool>(2) == &Hoge::flag);
}


Output:
No errors or program output.


Create a new paste based on this one


Comments: