gpt4 book ai didi

c++ - std::mem_fun 与 std::mem_fn

转载 作者:IT老高 更新时间:2023-10-28 12:43:08 26 4
gpt4 key购买 nike

std::mem_funstd::mem_fn 有什么区别?为什么命名如此困惑?

Boost 的 documentationstd::mem_fn 在大多数情况下可以替换 std::mem_fun 。那么在什么情况下你还会使用std::mem_fun

最佳答案

std::mem_fun已弃用。 std::mem_fn可以做它所做的一切,而且做起来更方便。两者的关系与std::bind1st 的关系相同。/std::bind2nd和 C++11 std::bind .两个std::mem_fnstd::bindstd::bind1st 之后开发和掌握和 std::mem_fun被纳入 C++98 标准。所以这意味着我们必须等到 C++11 才能用更好的替代品正确替换旧的东西。

例如,std::mem_fun只能处理带一个或不带参数的成员函数。 std::mem_fn是可变参数的,可以处理带有任意数量参数的成员。

您还需要在 std::mem_fun 之间进行选择和 std::mem_fun_ref取决于您是否要处理类对象的指针或引用(分别)。 std::mem_fn单独可以处理任何一个,甚至提供对智能指针的支持。

boost::mem_fn 的文档解释何时使用 std::mem_fun ,简而言之,就是您需要使用期望 std::mem_fun 的代码进行操作的时候。 ,或者需要可适应的仿函数(这是 C++03 中过时的概念*)。对于这些情况,您将无法插入 std::mem_fn要么,所以你有它:你会使用std::mem_fun为遗产。

*:我的意思是新代码不应该依赖于 C++03 协议(protocol),例如result_type成员类型(更习惯使用新的特征,如 std::result_of )——新设施如 std::bind/std::mem_fn事实上,如果它们出现在等效的 C++03 代码中,则确实提供这些成员。我让你来决定是否应该用 std::mem_fn 更新依赖于可适应仿函数的旧代码。依靠这种行为。

关于c++ - std::mem_fun 与 std::mem_fn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11680807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com