2013-12-15 63 views
1

mem_funmem_fun_ref和許多其他成員函數適配器可以使成員函數的行爲類似於或不是函數。但是有一個限制,他們調用的成員函數必須是const之一。我開始瞭解如何使用它們,但是它背後的原因讓我感到困惑和困惑。爲什麼這樣設計?爲什麼成員函數mem_fun調用必須是常量?

更新: 對不起。寫下面的例子。

class A 
{ 
    ... 
    //void fun(){cout<<"Fun";} This is not const and the compiler would complain 
    void fun() const {cout<<"Not fun";} 
    ... 
} 
vector<A> avec; 
... 
for_each(avec.begin(),avec.end(),mem_fun_ref(&A::fun)); 
... 
+4

我不明白你的意思..你可以做一個例子嗎? –

+0

FWIW,'std :: mem_fun'和'std :: mem_fun_ref'在C++ 11中被'std :: men_fn',更一般地'std :: bind'所取代。 –

回答

2

沒有這樣的限制。這些模板函數被const和非const成員函數重載。

例如

template<class S, class T> 
mem_fun_t<S,T> mem_fun(S (T::*f)()); 

template <class S, class T> 
const_mem_fun_t<S,T> mem_fun(S (T::*f)() const); 
+0

你是對的。我再次檢查。看起來這本書已經過時了。 –

相關問題