有没有一种简单的方法来调用带有默认参数的函数?

时间:2018-08-08 10:11:00

标签: c++ c++11 default-parameters function-parameter

这是带有默认参数的函数声明:

void func(int a = 1,int b = 1,...,int x = 1)

如何避免致电func(1,1,...,2) 当我只想设置x参数时,其余的都使用以前的默认参数?

例如,就像func(paramx = 2, others = default)

2 个答案:

答案 0 :(得分:12)

您不能将此操作作为自然语言的一部分。 C ++只允许您默认任何剩余的 参数,并且在调用站点(参见Pascal和VBA)不支持命名的参数

一种替代方法是提供一组重载函数。

否则,您可以使用可变参数模板自己设计一些东西。

答案 1 :(得分:6)

Bathsheba已经提到了您无法执行此操作的原因。

该问题的一种解决方案是将所有参数打包到structstd::tuple(在这里使用struct会更直观),然后仅更改所需的值。 (如果允许这样做的话)

以下是示例代码:

#include <iostream>

struct IntSet
{
    int a = 1; // set default values here
    int b = 1;
    int x = 1;
};

void func(const IntSet& all_in_one)
{
    // code, for instance 
    std::cout << all_in_one.a << " " << all_in_one.b << " " << all_in_one.x << std::endl;
}
int main()
{
    IntSet abx;
    func(abx);  // now you have all default values from the struct initialization

    abx.x = 2;
    func(abx); // now you have x = 2, but all other has default values

    return 0;
}

输出:

1 1 1
1 1 2