C++ 函数指针中不同数量的参数

C++ 函数指针中不同数量的参数,c++,pointers,C++,Pointers,我有一些具有不同数量参数的排序函数,例如: sort1(双制表符[],长n) sort2(双制表符[],长n,长p) 我需要编写一个函数指针,在其中我可以调用这两个函数。我使用了两个指针(一个用于有2个参数的函数,另一个用于3个参数)成功地做到了这一点,但是被告知了。它必须是一个函数。这是我早些时候想到的 void s1(void (*fun[])(double*, long ), double tab[], long n) void s2(void (*fun[])(double*,

我有一些具有不同数量参数的排序函数,例如:

sort1(双制表符[],长n)
sort2(双制表符[],长n,长p)

我需要编写一个函数指针,在其中我可以调用这两个函数。我使用了两个指针(一个用于有2个参数的函数,另一个用于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};

严格地说,我相信函数指针可以存储任何其他函数指针,只要它在被计算之前被转换回其原始形式。因此,函数指针可以是:

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

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

如所说,考虑一个函子或模板解决方案,因为它可能会产生更好的结果。

通常在C中,你将编写一个函数,该函数取最大数量的参数,然后检查保护值的参数。换句话说,如果-1或0是该参数的无效值,则可以传入该无效值以告知函数您不想使用它。在函数中,检查保护值并执行适当的排序。因此,您建议为<代码> > SoTr1 添加一个附加的参数,而不使用它?这是C还是C++问题?它是C++,如TAGM中所述,您应该提供更多的需求信息,因为C++中的不同方式是通过<代码> STD::函数< /C>和/或模板排序函数