2013-12-15 71 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

你是对的。我再次检查。看起来这本书已经过时了。 –

相关问题