mem_fun
а также mem_fun_ref
и многие другие адаптеры функций-членов могут заставить функции-члены действовать как обычные функции. Но есть одно ограничение, что вызываемая ими функция-член должна быть 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));
...
Там нет такого ограничения. Эти шаблонные функции перегружены для константных и неконстантных функций-членов.
Например
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);
Других решений пока нет …