对于这段简化的代码,我收到以下错误:
error: too few arguments to function std::cout << f();
int g(int a = 2, int b = 1)
{
return a + b;
}
template<class Func>
void generic(Func f)
{
std::cout << f();
}
int main()
{
generic(g);
}
我不知道为什么函数 f
的默认参数没有传递给函数 generic
的原因。它的行为就像 f
没有任何默认参数...
怎么了?
如何正确转发默认参数?
最佳答案
g
可能有默认参数,但是&g
的类型仍然是int(*)(int, int)
,不是可以不带参数调用的类型。在 generic
中,我们无法区分 - 我们已经失去了关于默认参数的上下文。
您可以将 g
包装在 lambda 中以保留上下文:
generic([]{ return g(); });
关于c++ - 忽略函数默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46205577/