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++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...