1.mem_fun vs mem_fn
在C++ 11之前,当需要使用STL算法对容器中的对象一次调用成员函数时,我们需要使用到mem_fun或者mem_fun_ref,至于mem_fun和mem_fun_ref之间的选择根据容器中存储的对象是对象指针还是对象本身来选择,其中mem_fun针对对象本身,而mem_fun_ref则针对对象本身。例如,
class T
{
public:
T() = default;
~T() = default;
void doSomething()
{
cout << "do something" << endl;
}
};
vector<T> vecT;
vecT.emplace_back(1);
vecT.emplace_back(2);
std::for_each(vecT.begin(), vecT.end(), mem_fun_ref(&T::print));
vector<T*> vecT;
vecT.emplace_back(new T(1));
vecT.emplace_back(new T(2));
std::for_each(vecT.begin(), vecT.end(), mem_fun(&T::print));
但是在C++ 11之后,mem_fun和mem_fun_ref已经被标记为de