编译时动态函数调用

时间:2012-12-19 10:01:15

标签: c++ macros sfinae compile-time

不确定标题是否突出了我的目标。

我可以在编译时动态调用方法吗? 例如:

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");

谢谢!

2 个答案:

答案 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");