【发布时间】:2011-03-27 15:32:16
【问题描述】:
我有线程生成函数,它接受许多在声明中具有默认值的参数。
int spawn(funcptr func, void arg = 0,int grp_id = 1,const charthreadname);
我想初始化第一个参数 func 和最后一个参数线程名称和其余变量分配它们的默认值。
spawn(myfunc,"我的线程");
我该怎么做。
【问题讨论】:
标签: c++ parameters function
我有线程生成函数,它接受许多在声明中具有默认值的参数。
int spawn(funcptr func, void arg = 0,int grp_id = 1,const charthreadname);
我想初始化第一个参数 func 和最后一个参数线程名称和其余变量分配它们的默认值。
spawn(myfunc,"我的线程");
我该怎么做。
【问题讨论】:
标签: c++ parameters function
这在 C++ 中是不可能的,一旦为参数分配了默认值,所有后续参数也应该具有默认参数。唯一的选择是重新排列参数,以便可以为其分配默认值的所有参数都排在最后。
【讨论】:
你不能。
其他语言支持 spawn(myfunc, , , "MyThread") 之类的东西,但不支持 C++。
相反,只需根据自己的喜好重载即可:
inline int spawn( funcptr func, const char*threadname) {
return spawn(func, 0, 1, threadname);
}
【讨论】:
其他答案在技术上是正确的,但 可以使用 Boost.Parameter 库来做到这一点。不过,它需要进行大量设置,对您来说可能值得,也可能不值得。
【讨论】:
来自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() 函数的人,您可以在最后使用默认值。而反过来是不可能的..
【讨论】: