2015-02-25 2 views
0

У меня есть несколько сортировочных функций с различными аргументами суммой, например:различного числа аргументов в функции указателе

sort1(double tab[], long n ) sort2(double tab[], long n, long p).

Мне нужно написать указатель funtion, в котором я могу назвать обе эти функции. Мне удалось сделать это, используя два указателя (один для функций с двумя аргументами и один для 3 аргументов), но ему сказали. Это должна быть одна функция. Это то, к чему я пришел раньше.

void s1(void (*fun[])(double*, long  ), double tab[], long n) 
void s2(void (*fun[])(double*, long, long), double tab[], long n) 

И эти массивы с именами функций:

void (*funs1[])(double tab[],   long n) = {bs, is, ss, hs}; 
void (*funs2[])(double tab[], long p, long n) = {qs, ms}; 
+0

Как правило, в C вы будете писать одну функцию, которая принимает максимальное количество аргументов, а затем проверяет аргументы для значений защиты. Другими словами, если -1 или 0 является недопустимым значением для этого параметра, вы можете передать это недопустимое значение, чтобы сообщить функции, которую вы не хотите использовать. В функции проверьте значения охраны и выполните соответствующий сортировку. –

+0

Итак, вы предлагаете добавить дополнительный аргумент для 'sort1', а не использовать его вообще? – photons3432

+0

Вы могли бы сделать это таким образом или просто «sort2» проверить значение второго аргумента. Если это недопустимое значение, просто выполните операцию, выполняемую 'sort1'. –

ответ

0

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

typedef void (*funp)(); 
funp f = (funp)funs2; 
f = (funp)funs1; 

((void (*)(double *,long))f)(NULL, 1); 

Это сказанное, рассмотрим функтор или шаблон решения, так как он, вероятно, дают лучшие результаты.

Смежные вопросы