不确定标题是否突出了我的目标。
我可以在编译时动态调用方法吗? 例如:
int CallMethod(string methodName, string methodArg)
{
Foo foo;
return foo.#methodName(methodArg);
}
CallMethod("getValue", "test"); // This would attempt to call on a Foo instance, method getValue with argument "test" -- foo.getValue("test");
谢谢!
答案 0 :(得分:4)
这是Reflection并且是not available natively in C++
如果methodName
的可能值有限,则可以构建一个基于methodName
调用相应函数的查找表,但不能使用此系统调用任意函数。
这可以是@PaperBirdMaster建议的std :: map,也可以是一组巨大的if-else
检查。但这不是真实的反思,只是一种粗暴的错觉。
答案 1 :(得分:4)
你可以创建一个宏:
#define CallMethod(methodName, var) { Foo foo; foo.##methodName(var); }
主要功能:
CallMethod(foo,"test");