#include #include #include struct Up { int execute() { return 3; } }; struct Down { int execute() { return 4; } }; struct Home { int execute() { return 5; } }; template struct E { std::size_t id = ID; T cb; }; int main(int argc, char** argv) { boost::fusion::vector, 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; }