![]() |
1
9
函数名不是C++对象的名称。 相反,当您使用函数名时,会发生一系列转换。重载解析基于调用或(隐式或显式)转换上下文完成,并生成指针。 函数的默认参数是重载解析的一部分。它们从不作为函数指针类型的一部分传递。 您可以创建一个简单的包装器,将函数名转换为函数对象:
通过此操作,您可以修改代码:
现在,
函数对象不是函数。lambda是函数对象,也是
为了解决你的问题,你应该让一个过载看起来比另一个好。
诀窍在于
您还可以更明确地生成诸如“可以用1个参数调用”、“可以用2个参数调用”之类的特征,然后声明只有当可以用1个参数而不是2个参数调用时才启用1 arg大小写。 也有基于标签调度的过载解析排序技术。 |
![]() |
2
17
当您将free函数作为参数传递时,它将经历函数到指针的转换。当这种情况发生时,默认参数( which is not a part of the function's type
lambda的类型不会经历这样的调整。未赋值表达式必须包含
当无捕获lambda被迫转换为函数指针时(例如
|
![]() |
user1683586 · 使用复制构造函数启用_if 7 年前 |
![]() |
ssb · C++SFINAE解析顺序 7 年前 |
![]() |
Viatorus · SFINAE:函数模板优化 8 年前 |
![]() |
Ammar Husain · 元编程的C++STL功能等价物 9 年前 |
![]() |
KentH · 使用std::result_of的意外SFINAE失败 10 年前 |