Добрый день!
Есть потребность вызывать функции с неизвестным числом параметров.
Я делаю это так:
// cast pointer to delegate
typedef void* (*AnyFunc)(...);
AnyFunc userFunc = AnyFunc(funcPtr);
Параметры для userFunc у меня в массиве.
Чтобы вызвать userFunc, я использую switch:
// call user defined function
void* result;
switch (argsCount)
{
case 0:
result = userFunc();
break;
case 1:
result = userFunc(args[0]);
break;
case 2:
result = userFunc(args[0], args[1]);
break;
.... и т.д.
Этот код работает. Но хотелось бы обойтись без switch на 255 кейсов.
Реальные функции на вход могут принимать различное число параметров. Например, как-то так:
int MyFunc1(int p1, int p2) { return p1+p2; } // изменить эти функции возможности нет.
int MyFunc2(int p1) { return p1*p1; }
Если передавать тупо массив вот так:
result = userFunc(args);
то, насколько я понимаю, передается не сам массив, а ссылка на него.
Поэтому у меня ничего не работает.
Посоветуйте пожалуйста, возможно ли как-то красиво решить эту проблему?
Спасибо!
п.с.: понадобилось сделать такой изврат, т.к. нужно обращаться к user defined functions созданных для excel. функции находятся в dll. на врод они на самом деле принимают переменное число указателей на struct XLOPER12, а не int, как в моих примерах.