类成员指针
类成员指针就是指向类成员的指针。
类成员指针即便是在赋值后也并不指向一个特定对象的成员,它是一个很宽泛的代表,相当于类成员有了一个别名一样。使用时需要在*前加上作用域符,但是大部分情况都是私有的,所以一般会定义一个函数返回类成员指针。而如果是成员函数指针,那么得要加括号,因为调用运算符的优先度更高,并且类型成员函数指针和类型成员函数对象不像不同函数能互相转换。
此外,假如说a是一个类成员指针,调用的时候就是b.a/b→a,这个时候它才真正有了实际的含义。
这类型写起来很麻烦,所以最好还是使用auto或者using来解决。
有的时候可以配合enum实现函数表。
可调用对象
类成员指针不是一个可调用对象,因此泛型算法不能使用。
但我们只需要将类成员的地址绑到一个function类型上即可,并且将类型本身显式化,也就是this要显式化作为形参。它就变为一个可调用对象了,隐式传入this作为参数。但是至于是使用.还是→来调用根据形参来判断。
为了避免.和→的问题,可以使用mem_fn(成员指针地址)函数来生成一个function对象,类型直接auto就可以了,这就对于任何无论是指针还是对象都可用了。
除了function,也可以使用bind(成员函数指针地址,_1)来将其变为一个可调用对象,实际上就是强制将this本身传进去。可以达到与mem_fn一样的效果。
类成员指针
https://lhish.github.io/project/hide/类成员指针/