带有可选参数的 C++ 函数

Jos*_*nar 2 c++

声明这样的方法的最佳方法是什么:

calc( string name, string arguments, 
      string lib, 
      string &output, string &error, 
      string finishInfo )
Run Code Online (Sandbox Code Playgroud)

每个参数都是可选的?如果需要,用户可以传递名称、参数和错误;只传递finishInfo 或传递所有六个参数。可能对用户最友好的是能够调用:

calc( "my name", , "my library", , , );
Run Code Online (Sandbox Code Playgroud)

但我不知道是否可以不用提升。我不能重载,因为我需要创建 62 个方法。我最好的想法是:

calc( string * name = NULL, string * arguments = NULL, 
      string * lib = NULL, 
      string * output = NULL, string * error = NULL, 
      string * finishInfo = NULL )
Run Code Online (Sandbox Code Playgroud)

我正在将所有内容更改为指针,这样我们需要调用

calc( ptr_myName, NULL, ptr_myLib, NULL, NULL, NULL );
Run Code Online (Sandbox Code Playgroud)

或者

calc( string name = "", string arguments = "",
      string lib = "",
...
calc( "", "",
      "my library",
Run Code Online (Sandbox Code Playgroud)

And*_*dyG 7

我对许多相同类型的参数的经验是,当我试图记住它们的顺序时,它很快就会变成令人沮丧和难以理解的混乱。其他语言如 Python 可以选择在将参数传递给函数时命名参数,但不幸的是,我们在 C++ 中没有这样的玩笑

一个很好的解决方法是参数结构。使用公共变量(或等效的 getter/setter 函数,但我通常没有发现这是必要的),最终用户可以在将结构传递给函数之前以清晰的方式设置所需的字段:

例如:

struct calc_args
{
   string name;
   string arguments;
   string finish_info;
   string output; // out arg
   string finishInfo; // out arg
};

void calc(calc_args& arguments)
{
   // ...
}
Run Code Online (Sandbox Code Playgroud)