类似于C的反射特性



我想知道如何在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"的//

相关内容

  • 没有找到相关文章

最新更新