如何在不重复前一个参数的情况下提供默认参数?

时间:2016-08-21 16:57:37

标签: c++ function parameters named

我搜索了很多资源,在他们提供的示例中,它看起来像这样:

void bar(int a = 4, char b = 'A') 
{ 
}

根据this resource,它可以被称为:

bar(b : 'Z');

但它给了我一个错误identifier "b" is undefined。 我正在使用Visual Studio 2015 Update 3 Enterprise。

有关如何仅指定第二个参数的任何建议吗?

2 个答案:

答案 0 :(得分:7)

您链接的文件只是一个提案¹。您尝试使用的机制(当前)不是标准中定义的C ++的一部分。因此,您不能指望编译器实现它。

目前还没有其他标准的解决方法。如果要设置某个参数,还需要在函数声明中提供其前面的所有参数。

您可以使用Boost Parameter之类的内容或自行实现类似功能,以使用用户代码模拟功能。这是否是一个好主意是辩论,它并不常见,因此可能会让其他程序员感到困惑。

¹这可能是一个语言问题:“提议”是某人所说的好事,而不是状态问题。

答案 1 :(得分:0)

一种可能的解决方案可能是将std::bind与该命名空间中定义的占位符一起使用。例如:

void bar(int a = 4, char b = 'A') {
}

using namespace std::placeholders;
auto f = std::bind(bar, 2, _2);
f('Z'); // equivalent to bar(2, 'Z');

正如在另一个答案中所建议的那样,std::bind表达式无法使用函数声明中的默认参数,但它至少允许您只指定其中一个参数。