在学习c++Primer书的时候,就说要整理下c++关于函数的这部分知识,,现在想把自己学到的一些用法罗列下,以备忘。主要是关于函数指针和函数绑定的这块。
还是写例子吧。
普通函数指针:
typedef void(*pfun)(int);
void fun(int i) { }
使用
pfun pf = fun;
(*pf)(2); //ok,or: pf(2);
类成员函数:
typedef void(Base::*pfun2)(int);
class Base{
public:
void fun(int i) { }
};
pfun2 pf2 = &Base::fun;
Base b;
(b.*pf2)(8);
c++11函数绑定:
std::function可以绑定到全局函数/类静态成员函数(类静态成员函数与全局函数没有区别),如果要绑定到类的非静态成员函数,则需要使用std::bind。
typedef std::function<void(int)> pfun3;
pfun pfc;
pfc = fun;
pfc = [ ](int i){ i++; }
使用
pfun3 pf1 = fun;pf1(1);
Base a;
pfun3 pf2 = std::bind(&Base::fun, a, std::placeholders::_1);
pf2(2);
函数类:
int add(int i, int j){ return i+j; }
auto mod = [ ] (int i, int j){ return i%j; }
class divide
{
int operator()(int i, int j){ return i/j; }
};
map<char, function<int(int,int)> >bindfun =
{
{'+', add}
{'%', mod}
{'/', divide()}
{'*', [ ](int i, int j){return i*j; } }
};
int r = bindfun['+'](7, 8);
OK,,还有其他的用法,我也不去想了,,目前先列这么多,,估计也差不多了,,主要的地方是用在临时函数,函数回掉,函数做参数等这些用法上,到用的时候,还是要参考别人的代码,比如说写个消息分发器,函数注册回调器等等。。。