Почему вызовы функции-члена mem_fun должны быть константными?

mem_fun а также mem_fun_ref и многие другие адаптеры функций-членов могут заставить функции-члены действовать как обычные функции. Но есть одно ограничение, что вызываемая ими функция-член должна быть константной. Я узнаю, как их использовать, но смущен и озадачен причинами этого. Почему он разработан таким образом?

Обновление: извините за двусмысленность. напишите пример ниже.

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));
...

1 ответ

Решение

Там нет такого ограничения. Эти шаблонные функции перегружены для константных и неконстантных функций-членов.

Например

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);
Другие вопросы по тегам