我搜索了很多资源,在他们提供的示例中,它看起来像这样:
void bar(int a = 4, char b = 'A')
{
}
根据this resource,它可以被称为:
bar(b : 'Z');
但它给了我一个错误identifier "b" is undefined
。
我正在使用Visual Studio 2015 Update 3 Enterprise。
有关如何仅指定第二个参数的任何建议吗?
答案 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
表达式无法使用函数声明中的默认参数,但它至少允许您只指定其中一个参数。