【发布时间】:2022-01-28 02:04:01
【问题描述】:
我一直在阅读 Meyers 的《Effective STL》。
我遇到了一些提到函数适配器对象的部分,例如not1、bind1st、bind2nd。显然有一系列这样的功能适配器对象,但是我以前从未遇到过这些。另一个例子是mem_fun 和mem_fun_ref。
其中许多继承自 unary_function 和 binary_function。下面提供了一些链接。
https://en.cppreference.com/w/cpp/utility/functional/unary_function
https://en.cppreference.com/w/cpp/utility/functional/binary_function
https://en.cppreference.com/w/cpp/utility/functional/mem_fun
这些对象在 C++ 11 中被贬低,这可能解释了为什么我以前没有遇到过它们。
为什么不推荐使用它们,以及取而代之的是什么?我的直觉告诉我,lambda 可以替换这样的函数对象,并且在阅读本书时我确实想到 STL 容器上的一些排序操作可以使用 lambda 而不是函数对象来描述。
- lambda 是否完全取代了这些“适配器函数”。
- 如果是这样,函数对象在 C++ 11 之后仍然有用吗?如果它们在 STL 中已过时,这是否意味着函数对象在 C++ 11 中的任何地方都已过时,还是仍然有用途?
作为最后的评论,是否有任何关于 STL 的现代书籍可以很好地替代 Meyers Effective STL?我从阅读他的书中学到了很多东西,但其中包含过时信息的部分可能比我目前意识到的要多。
【问题讨论】:
-
mem_fun替换为mem_fn。 -
关于术语的小问题:这些东西已弃用,而不是贬值。没有“我”。
-
我已经回滚了您的编辑请求书籍建议。此类请求在网站上不合适;请不要再次尝试编辑它。
标签: c++ c++11 stl function-object