C++ 11 std::mem_fn

mem_fn
想到member function 成员函数

这还真就是用来调用成员函数的
普通的函数我们通过函数指针可以调用,但对于成员函数的调用稍微复杂一点,需要对象,也即this指针
因为成员函数和对象并不存储在一起,一个对象的内存空间不包括函数代码,否则每个对象都包含自己的函数代码,内存就比较浪费
看下面的例子就懂了

#include <functional>
#include <iostream>
 
struct Foo {
    void display_number(int i) {
        std::cout << "number: " << i << '\n';
    }
    int data = 7;
};
 
int main() {
    Foo f;
    auto print_num = std::mem_fn(&Foo::display_number);
    print_num(f, 42);
 
    auto access_data = std::mem_fn(&Foo::data);//专门获取对象中data值的函数
    std::cout << "data: " << access_data(f) << '\n';//传入对象f,即获取f的data值
}

posted @ 2023-02-06 21:46  ecnu_lxz  阅读(59)  评论(0编辑  收藏  举报