在C++函数中跳过一些参数?

kyr*_*pav 11 c++ optimization arguments default-arguments

我有一个C++函数,它有5个参数,所有参数都有默认值.如果我传入前三个参数,程序将为最后两个参数分配一个默认值.有没有办法传递3个参数,并在中间跳过一个,给出值,比如第一,第二和第五个参数?

bst*_*our 5

不是直接的,但你可以用std :: bind做一些事情:

int func(int arg1 = 0, int arg2 = 0, int arg3 = 0);

// elsewhere...
using std::bind;
using std::placeholders::_1;
auto f = bind(func, 0, _1, 0);

int result = f(3); // Call func(0, 3, 0);
Run Code Online (Sandbox Code Playgroud)

缺点当然是您要重新指定默认参数.我相信别人会有一个更聪明的解决方案,但如果你真的很绝望,这可能会奏效.


Ada*_*mar 0

不,这是不可能的。
不过,我建议您应该使用参数的数据类型数组来实现您给出的场景。你也可以超载。如果参数的数据类型不同,那么您应该定义一个类,该类将所需的参数作为成员。传递该类的对象。它不仅可以解决您的问题,而且从可维护性的角度也是值得推荐的。