在 C++ 中有没有办法像在 python 中那样按名称传递参数?

moo*_*oko -1 c++ arguments function parameter-passing

在 C++ 中有没有办法像在 python 中那样按名称传递参数?例如我有一个功能:

void foo(int a, int b = 1, int c = 3, int d = 5);
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式称它为:

foo(5 /* a */, c = 5, d = 8);
Run Code Online (Sandbox Code Playgroud)

或者

foo(5, /* a */, d = 1);
Run Code Online (Sandbox Code Playgroud)

Edu*_*eia 5


您必须按顺序传递参数,因此,要为 指定一个值d,您还必须为 指定一个值c,因为它是在它之前声明的。


cig*_*ien 5

C++ 中没有命名函数参数,但您可以使用 C++20 中的指定初始化程序实现类似的效果。

取出所有函数参数并将它们放入一个结构体中:

struct S 
{
    int a{}, b{}, c{}, d{};
};
Run Code Online (Sandbox Code Playgroud)

现在修改您的函数以获取该结构的实例(const&为了提高效率)

void foo(S s) 
{
    std::cout << s.a << " " << s.b << " " << s.c << " " << s.d;  // for example
}
Run Code Online (Sandbox Code Playgroud)

现在你可以像这样调用函数:

foo({.a = 2, .c = 3});  // prints 2 0 3 0 
                        // b and d get default values of 0
Run Code Online (Sandbox Code Playgroud)

这是一个演示