好的,这就是我需要的:
func
有一些值,由用户给出(不是常数)func
?更新:
也许我认为我需要的是非常明显的,但是因为我注意到许多downvotes,你在这里:
string func = "myfunc";
Run Code Online (Sandbox Code Playgroud)
我需要一些call(func)
会打电话的东西myfunc
.像PHP的call_user_func_array()
有任何想法吗?
我看了一下mixins,但这看起来并不像我需要的那样.
PS我标注的问题与c
和c++
太,因为一个通用的解决方案可能是理论上的可能,考虑到语言之间的相似之处.
编程语言通常不提供在运行时访问函数名称的方法,因为这些名称通常被链接器删除,只留下机器代码。
正如 user3286380 所建议的,解决这个问题的一种方法(适用于所有语言)是制作一个交叉引用函数名称和指向各个函数的指针的表。然后,您的程序可以在运行时查找该表。
如果相关语言允许自省(运行时或编译时),您可以枚举模块或程序中的函数,并查找用户输入名称的函数。在 D 中,您可以通过使用模块上的allMembers
特征来做到这一点。这将为您提供模块中所有声明的数组;下一步是过滤掉函数,检查函数签名是否匹配,然后生成一个调用相应函数的 switch 语句。您可以使用 CTFE 和字符串 mixin 来实现上述目的。