c++11调用成员函数mem_fn和适合普通函数指针
2014-07-16 04:17
288 查看
在C++11之前,调用一个成员函数指针做为容器的回调算法时,可以根据其容器内存储的内容是对象还是指针调用相关的mem_fun和_mem_fun_ref函数来与算法等进行适配,搭配使用。
在c++11中加入mem_fn来对成员函数的调用进行相关的封装,不过也需要对方法指针定义为成员函数的形式。
实例代码如下所示:
当然,这里最好的,最为优雅的方式还是转用lambda的方式进行实现。如下代码所示:
实现相同的功能,爱死你了auto。。
在c++11中加入mem_fn来对成员函数的调用进行相关的封装,不过也需要对方法指针定义为成员函数的形式。
实例代码如下所示:
#include <functional> #include <algorithm> #include <string> #include <vector> #include <iostream> using namespace std; void findEmptyString(const vector<string>& strings) { auto end = strings.end(); auto it = find_if(strings.begin(), end, mem_fn(&string::empty) ); //此处的成员函数指针要表示为相应的成员函数的形式,且使用mem_fn进行包装 if ( it == end) { cout<<"no empty strings~"<<endl; }else { cout<<"empty string at position: "<<it - strings.begin()<<endl; } } int main() { vector<string> myVector; string one = "buaa"; string two = ""; myVector.push_back(one); myVector.push_back(one); myVector.push_back(two); myVector.push_back(one); findEmptyString(myVector); system("pause"); return 0; }运行效果如下图
当然,这里最好的,最为优雅的方式还是转用lambda的方式进行实现。如下代码所示:
auto it = find_if(strings.begin(), end, [](const string* str){ return str->empty(); });
实现相同的功能,爱死你了auto。。
相关文章推荐
- C++中通过派生类调用第二基类的普通成员函数时this指针的调整
- MFC 外部普通函数获取类对象指针来调用类的成员函数
- 转: C++指针直接调用类成员函数探讨
- 空指针为什么能调用成员函数?
- 深入探索c/c++函数(2)---普通成员函数调用的基本过程
- 通过一个非法的指针或者NULL指针调用成员函数会发生什么?
- 深入探索c/c++函数(2)---普通成员函数调用的基本过程
- 成员函数指针和其他类型的强制转换,使用一般指针调用成员函数
- 转:关于在C++内用指针调用类的成员函数
- 使用类成员函数指针调用C++成员函数的一种方式
- 静态成员函数不能调用普通成员变量
- 普通函数,成员函数,静态成员函数与【指针】
- 关于在C++内用指针调用类的成员函数
- 简析function/bind如何实现类成员函数指针绑定调用
- C++指针直接调用类成员函数探讨(zz)
- 类的普通成员函数的指针
- 空指针的成员函数调用
- 空指针的成员函数调用
- 不知道子类成员函数的情况下,用父类方法调用子类的成员函数指针,需增加/vmg命令
- C++成员函数指针的另类调用方法