bar
и jar
являются функциями-членами. Они принимают указатель - this
в качестве первого скрытого параметра, вы не можете рассматривать их как свободные функции. И вы не можете просто заключить их в function<void(void)>
, указав на них указатели - что вы делаете сейчас.
Вы должны использовать std::bind
, чтобы связать this
с функциями-членами (или использовать лямбда-выражения):
std::map<std::string, std::function<void(void)> > myMap2 =
{
{"bar", std::bind(&Foo::bar,this)},
{"jar", std::bind(&Foo::jar,this)}
};
или сохранить указатели на функции:
std::map<std::string, void (Foo::*)(void) > myMap =
{
{"bar", &Foo::bar},
{"jar", &Foo::jar}
};