我想通过名称动态调用函数,例如,假设有以下函数和字符串:
void do_fork() { printf ("Fork called.\n"); } char *pFunc = "do_fork";
现在我需要通过* pFunc调用do_fork().那可能吗?
欢迎使用C/C++代码,非常感谢!
解决方法
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而不是普通函数指针,可以稍微提升此限制(以包含合理兼容的签名).