c – 如何从名称中调用c函数,该函数存储在char *指针中?

前端之家收集整理的这篇文章主要介绍了c – 如何从名称中调用c函数,该函数存储在char *指针中?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想通过名称动态调用函数,例如,假设有以下函数和字符串:
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而不是普通函数指针,可以稍微提升此限制(以包含合理兼容的签名).

猜你在找的C&C++相关文章