2013-12-15 2 views
1

mem_funmem_fun_ref 등 많은 멤버 함수 어댑터가 멤버 함수를 같은 함수로 사용할 수 있습니다. 그러나 호출하는 멤버 함수는 const이어야합니다. 나는 그것들을 사용하는 방법을 알게되지만 그 배경에 혼란스럽고 혼란 스럽다. 이런 방식으로 설계된 이유는 무엇입니까?멤버 함수 mem_fun이 const 호출이어야하는 이유는 무엇입니까?

업데이트 : . 모호한 점에 대해 사과드립니다. 아래에 예를 적으십시오.

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 및 non-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

유, 네 말이 맞아. 나는 다시 점검했다. 책이 어떻게 든 쓸모없는 것처럼 보입니다. –