Передать массив в функцию по значению
От: stas19t  
Дата: 01.09.10 06:33
Оценка:
Добрый день!
Есть потребность вызывать функции с неизвестным числом параметров.
Я делаю это так:
// 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, как в моих примерах.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.