Ни C, ни C ++ не имеют достаточного отражения, чтобы сделать это из коробки, поэтому вам придется реализовать свою собственную схему.
В C ++ более или менее канонический способ сделать это - использовать карту строк для работы указателей.Примерно так:
typedef void (*func_t)();
typedef std::map<std::string,func_t> func_map_t;
// fill the map
func_map_t func_map;
func_map["do_fork"] = &do_fork;
func_map["frgl"] = &frgl;
// search a function in the map
func_map_t::const_iterator it = func_map.find("do_fork");
if( it == func_map.end() ) throw "You need error handling here!"
(*it->second)();
Конечно, это ограничено функциями с точно такой же сигнатурой.Однако это ограничение может быть несколько снято (чтобы охватить разумно совместимые подписи), используя std::function
и std::bind
вместо простого указателя функции.