Sco*_*tty 30 c++ std member-functions c++11
std::mem_fun
和之间有什么区别std::mem_fn
?为什么命名如此令人困惑?
Boost的文档说在大多数情况下std::mem_fn
都可以替代std::mem_fun
.那你在什么情况下仍会使用std::mem_fun
?
Luc*_*ton 47
std::mem_fun
已弃用.std::mem_fn
可以做它所做的一切,而且它更方便.两者之间的关系与std::bind1st
/ std::bind2nd
和C++ 11 之间的关系相同std::bind
.二者std::mem_fn
并std::bind
进行了开发和后掌握std::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协议,例如result_type
成员类型(比较习惯使用新的特征std::result_of
) - 像std::bind
/ std::mem_fn
do这样的新设施实际上提供了这些成员它们将存在于等效的C++ 03代码中.我留给你看看你是否应该std::mem_fn
依靠这种行为来更新依赖于适应性仿函数的旧代码.
归档时间: |
|
查看次数: |
8601 次 |
最近记录: |