snippet.cpp
#include <boost/fusion/algorithm/iteration/for_each.hpp>
#include <boost/fusion/container/vector.hpp>
#include <iostream>
 
 
struct Up {
  int execute()
  {
    return 3;
  }
};
 
struct Down {
  int execute()
  {
    return 4;
  }
};
 
struct Home {
  int execute()
  {
    return 5;
  }
};
 
 
template<std::size_t ID, typename T>
struct E {
  std::size_t id = ID;
  T cb;
};
 
 
int main(int argc, char** argv)
{
  boost::fusion::vector<E<1, Up>, E<2, Down>, E<3, Home>> vec{};
 
  std::size_t r{42};
  boost::fusion::for_each(vec, [argc,&r](auto i) {
    if (i.id == argc)
    {
      r = i.cb.execute();
    }
  });
  return r;
}