C++11语法中的:mem_fn。 先上定义:
template< class R, class T >
/*unspecified*/ mem_fn(R T::* pm);
//R代表result_type,即返回类型。
//T代表传入的class或struct。
//pm - pointer to member that will be wrapped.
该函数可以传入struct或class。然后返回一个指向传入object的函数容器。该容器可以指向struct或class的成员变量或成员函数。
#include <functional>
#include <iostream>
struct Foo {
void display_greeting() {
std::cout << "Hello, world.\n";
}
void display_number(int i) {
std::cout << "number: " << i << '\n';
}
int data = 7;
};
int main() {
Foo f;
auto greet = std::mem_fn(&Foo::display_greeting);
greet(f);
auto print_num = std::mem_fn(&Foo::display_number);
print_num(f, 42);
auto access_data = std::mem_fn(&Foo::data);
std::cout << "data: " << access_data(f) << '\n';
}