На самом деле я собираюсь пойти против всех здесь, и вашего желания.
Многоточие неверно. Он считался незаменимым в Си, но с тех пор мы научились лучше.
Действительно, в C ++ есть способы добиться гораздо большего, используя объекты и, например, функциональные объекты.
То, что вы ищете, это шаблон команд .
Создайте базовый класс с именем «Command» (интерфейс с методом execute ()), затем для каждой из «функций», которые вы хотите поместить в «void (* func) ()», вы создаете производный класс.
Теперь ваш код будет выглядеть так:
std::vector<RESULT*> param(10, NULL);
if (Root->Function->argc < 0) {
/* Function with variable argument list: */
/* pass number of arguments as first parameter */
Command1* aCommand = new Command1(Root->Result);
aCommand->set(Root->Result, argc, ¶m);
Root->Function->command = aCommand;
Root->Function->command->execute();
} else {
Command2* aCommand = new Command2(Root->Result);
aCommand->set(Root->Result, param[0], param[1], param[2], param[3], param[4], param[5], param[6], param[7], param[8], param[9]);
Root->Function->command = aCommand;
Root->Function->command->execute();
}
Здесь вам не нужно многоточия, потому что каждый объект команды является специализированным и точно знает, какие параметры ему нужны (число И типы).
Шаблон команд позволяет вам пользоваться всеми преимуществами «...» (многоточия) без неудобств. Ну, конечно, некоторые скажут, что это потеря времени, так как они все равно не делают ошибок, поэтому им не нужно больше печатать ... к сожалению, я не настолько умен, поэтому предпочитаю определять ограничения (число, типы , утверждений) и пусть компилятор применяет их для меня.