Не уверен, что название подчеркивает мою цель.
Могу ли я динамически вызывать метод во время компиляции?
Например:
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");
Спасибо!
Вы можете создать макрос:
#define CallMethod(methodName, var) { Foo foo; foo.##methodName(var); }
в основной функции:
CallMethod(foo,"test");
Это отражение и является не доступно изначально в C ++
Если у вас есть ограниченное количество возможных значений для methodName
Вы можете построить таблицу подстановки, которая вызывает соответствующую функцию на основе methodName
но вы не можете вызывать произвольные функции с этой системой.
Это может быть либо std :: map, как предлагает @PaperBirdMaster, либо гигантский набор if-else
чеки. Но это не настоящее Отражение, просто грубая иллюзия того же самого.