[英]std::mem_fun vs std::mem_fn
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
之間的關系相同。 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::bind
/ std::mem_fn
確實提供了那些成員,如果它們存在於等效的C ++ 03代碼中。 我留給你看看你是否應該依靠這種行為來更新依賴於std::mem_fn
的自適應函子的舊代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.