![]() |
1
2
你的文章仍然一团糟,同一期有4个不同版本。我将关注第一个代码片段,因为它似乎是最接近[mcve]的代码片段,我将澄清如何正确使用lambda和函数对象。
这有点误导人。我建议将其更改为等效的,但更多地用于:
这意味着:声明一个名为
如您所见,您的函数接受一个经典的C函数指针。它不会接受任何类型的函数对象。这里要注意的是,没有捕获的lambda可以转换为函数指针。 如保留上述声明:
原因很容易理解。非捕获lambda可以等效于自由函数,但捕获lambda具有状态(由捕获集形成),因此它比简单的、经典的自由函数“更多”。
正如您所看到的,接受函数指针在很大程度上是一个古老的习语,因为这些限制(甚至不考虑传递任何类型的函数对象,例如
对于接受任何类型的可调用对象,通常有两个选项:通用模板或标准
模板对象
现在你可以打电话了
您还可能希望添加完美的转发(为了简洁起见,在示例中省略了)。
|
![]() |
AstralHex · 矩阵乘法代码工作不正常 3 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 3 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 3 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 4 月前 |