Динамический вызов функции времени компиляции

Не уверен, что название подчеркивает мою цель.

Могу ли я динамически вызывать метод во время компиляции?
Например:

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

Решение

Вы можете создать макрос:

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

в основной функции:

CallMethod(foo,"test");
4

Другие решения

Это отражение и является не доступно изначально в C ++

Если у вас есть ограниченное количество возможных значений для methodName Вы можете построить таблицу подстановки, которая вызывает соответствующую функцию на основе methodName но вы не можете вызывать произвольные функции с этой системой.

Это может быть либо std :: map, как предлагает @PaperBirdMaster, либо гигантский набор if-else чеки. Но это не настоящее Отражение, просто грубая иллюзия того же самого.

4

По вопросам рекламы [email protected]