std::mem_fun
和 和有什么不一样std::mem_fn
?为什么命名如此混乱?
Boost 的文档说在大多数情况下std::mem_fn
可以替换。std::mem_fun
那么在什么情况下你还会使用std::mem_fun
呢?
std::mem_fun
和 和有什么不一样std::mem_fn
?为什么命名如此混乱?
Boost 的文档说在大多数情况下std::mem_fn
可以替换。std::mem_fun
那么在什么情况下你还会使用std::mem_fun
呢?
std::mem_fun
已弃用。std::mem_fn
可以做它所做的一切,而且做起来更方便。两者的关系与std::bind1st
/std::bind2nd
和 C++11的关系相同std::bind
。两者都是在 C++98 标准之后开发std::mem_fn
和std::bind
掌握的。所以这意味着我们必须等到 C++11 才能用更好的替代品正确地替换旧的东西。std::bind1st
std::mem_fun
例如,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 协议(result_type
更习惯于使用新的特征std::result_of
,如它们将出现在等效的 C++03 代码中。我让你来决定是否应该通过依赖这种行为来更新依赖于可适应函子的旧代码。std::bind
std::mem_fn
std::mem_fn