我想知道如何在C中动态调用函数,而不需要在代码中键入函数调用。
我有不同的消息,例如:START
, STOP
, TEST
。
我在库中有函数:process_msg_START
, process_msg_STOP
, process_msg_TEST
。
我想调用正确的函数,而不需要显式地键入Name,就像在c#中使用Reflections或动态运行时一样。
你有什么主意吗?
不幸的是,编译后的程序在编译器/链接器完成它们的工作后并不知道函数的名称。像c#这样的解释性语言在程序运行时保留了大部分源代码,因此解释器可以在代码库中搜索某些函数(尽管我不声称知道反射实际上是如何工作的)。
你唯一的解决方案是有一个映射绑定一个字符串/枚举到一个函数指针,或做一个类似的过程与脚本语言在你的代码库(如Lua)
- 具有成员"name"(字符串)和"fn"(函数指针)的结构;
- 此类结构的数组;
- 通过指针扫描正确的名称并调用相应函数的循环;
由于您是c++新手,因此学习预编译器指令可能会为您带来一些帮助。例如:
#include "stdafx.h"
#include <iostream>
//#define TEST "true"
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << "a";
#ifdef TEST
std::cout << "b";
#endif
std::cout << "c";
return 0;
}
删除带有#define的行中打印"b"的//