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

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

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]