2

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

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

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

谢谢!

4

2 回答 2

4

这是反射在 C++ 中本机不可用

如果您的可能值数量有限,则methodName可以构建一个查找表,该表根据该表调用适当的函数,methodName但您不能使用该系统调用任意函数。

这可能是@PaperBirdMaster 建议的 std::map 或一组巨大的if-else检查。但这不是真正的反射,只是一种粗略的错觉。

于 2012-12-19T10:02:37.367 回答
4

您可以创建一个宏:

#define CallMethod(methodName, var) { Foo foo; foo.##methodName(var); }

在主要功能中:

CallMethod(foo,"test");
于 2012-12-19T10:04:57.197 回答