我已经看到了cppreference是std::function::argument_type
在C ++ 17弃用。背后的原因是什么?ISO WG21论文提出了什么?
相关论文为P0005R4(已被选入标准草案的论文)和P0090R0(已由P0005R4引用)。
引用P0090R0:
Q2。result_type等有什么问题?
A2。这些C ++ 98/03 / TR1-era typedef早于decltype和完善的转发。以前,通用代码必须先适应功能对象,然后才能对其进行适应。现在,无需手动传达该信息。decltype取代了result_type,因为编译器可以简单地报告使用特定参数调用函数对象的结果。完美的转发取代了arguments_type系列,因为适配器可以简单地接受/存储/转发任意参数。
实际上,这些typedef比没有用的要糟。它们起反作用,因为许多可调用对象缺少它们。函数指针和成员指针始终缺少它们。最近删除了ptr_fun(),它使用这些typedef封装了函数指针(再次参见[1])。最重要的是,lambda始终缺少这些typedef,它们是所有类型中最重要的功能对象。通用lambda更不兼容。
这意味着,如果用户尝试使用typedef的result_type系列编写通用代码,则他们的代码将不是通用的-它将无法处理lambda,通用lambda,函数指针等。
应该删除这些typedef,因为它们已经对现代代码产生了积极的危害。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句