我有线程生成函数,它接受许多在声明中具有默认值的参数。
int spawn(funcptr func,void arg = 0,int grp_id = 1,const char threadname);
我想初始化第一个参数func和最后一个参数线程名称,剩下的变量分配它们的默认值。
spawn(myfunc,“My Thread”);
我该怎么办呢。
答案 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 ++中是不可能的,一旦为参数指定了默认值,所有后续参数也应该具有默认参数。唯一的选择是重新排列参数,以便可以分配所有可以分配默认值的参数。