D中的变量函数调用

Dr.*_*eon 5 c c++ d

好的,这就是我需要的:

  • 假设我们有一个字符串变量,例如func有一些值,由用户给出(不是常数)
  • 我们怎么能调用一个名称是值的函数func

更新:

也许我认为我需要的是非常明显的,但是因为我注意到许多downvotes,你在这里:

string func = "myfunc";
Run Code Online (Sandbox Code Playgroud)

我需要一些call(func)会打电话的东西myfunc.像PHP的call_user_func_array()


有任何想法吗?

我看了一下mixins,但这看起来并不像我需要的那样.


PS我标注的问题与cc++太,因为一个通用的解决方案可能是理论上的可能,考虑到语言之间的相似之处.

Vla*_*eev 4

编程语言通常不提供在运行时访问函数名称的方法,因为这些名称通常被链接器删除,只留下机器代码。

正如 user3286380 所建议的,解决这个问题的一种方法(适用于所有语言)是制作一个交叉引用函数名称和指向各个函数的指针的表。然后,您的程序可以在运行时查找该表。

如果相关语言允许自省(运行时或编译时),您可以枚举模块或程序中的函数,并查找用户输入名称的函数。在 D 中,您可以通过使用模块上的allMembers特征来做到这一点。这将为您提供模块中所有声明的数组;下一步是过滤掉函数,检查函数签名是否匹配,然后生成一个调用相应函数的 switch 语句。您可以使用 CTFE 和字符串 mixin 来实现上述目的。