【问题标题】:Parameters assignment with default values for a function使用函数的默认值分配参数
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你不能。

      其他语言支持 spawn(myfunc, , , "MyThread") 之类的东西,但不支持 C++。

      相反,只需根据自己的喜好重载即可:

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

      【讨论】:

        【解决方案3】:

        其他答案在技术上是正确的,但 可以使用 Boost.Parameter 库来做到这一点。不过,它需要进行大量设置,对您来说可能值得,也可能不值得。

        【讨论】:

          【解决方案4】:

          来自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() 函数的人,您可以在最后使用默认值。而反过来是不可能的..

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-09-19
            • 2021-05-28
            • 1970-01-01
            • 2011-02-20
            • 2011-04-09
            相关资源
            最近更新 更多