使用函数的默认值分配参数

时间:2010-08-10 05:05:11

标签: c++ parameters function

我有线程生成函数,它接受许多在声明中具有默认值的参数。

int spawn(funcptr func,void arg = 0,int grp_id = 1,const char threadname);

我想初始化第一个参数func和最后一个参数线程名称,剩下的变量分配它们的默认值。

spawn(myfunc,“My Thread”);

我该怎么办呢。

4 个答案:

答案 0 :(得分:6)

你不能。

其他语言支持spawn(myfunc, , , "MyThread")等内容,但不支持C ++。

相反,只需按照自己的喜好重载:

inline int spawn( funcptr func, const char*threadname) {
    return spawn(func, 0, 1, threadname);
}

答案 1 :(得分:1)

其他答案在技术上是正确的,但使用Boost.Parameter 可以做到这一点。它需要相当多的设置,可能或不值得你。

答案 2 :(得分:1)

来自here

带有默认参数的参数必须是函数声明参数列表中的尾随参数。

例如:

void f(int a, int b = 2, int c = 3);  // trailing defaults
void g(int a = 1, int b = 2, int c);  // error, leading defaults
void h(int a, int b = 3, int c);      // error, default in middle

因此,如果您是声明并定义spawn()函数的人,则可以在结尾处使用默认值。反之则不可能..

答案 3 :(得分:0)

这在C ++中是不可能的,一旦为参数指定了默认值,所有后续参数也应该具有默认参数。唯一的选择是重新排列参数,以便可以分配所有可以分配默认值的参数。