Vyhnul bych se použití maker, jak tu někdo před tím doporučil. Pro použití makra musí být opodstatnění, tady ho nespatřuji.
V použití std::map neshledávám nic špatného, používáme to také, asi takhle:
typedef std::function< void ( int ) > Callback;
typedef std::map< const std::string, const Callback > CallbackMap;
const CallbackMap callbacks{
{ "stats", std::bind( &stats, _1 ) },
{ "bla", std::bind( &bla, _1 ) }
};
/* volani */
const CallbackMap::const_iterator it = callbacks.find( cmd );
if( it != callbacks.end() )
{
it->second( arg );
}