c++11:std::function
introduce
头文件
类模板声明
template< class R, class... Args > class function<R(Args...)>;
|
类模板std::function是通用的多态函数包装器。std::function的实例能存储、拷贝并调用任何可复制构造的可调用目标—函数,例如lambda表达式,bind表达式,或其他函数对象,以及成员函数指针和指向成员数据的指针。
函数绑定
绑定普通函数
void print(int&); std::function<void(int&)> f = print
|
绑定lambda
std::function<void()> f = []{ std::cout << "stored lambda" };
|
绑定bind返回的结果
void print(int); ... std::function<void()> f = std::bind(print, 2);
|
绑定成员函数
class test{ public: test(){} void testa() { std::cout << "testa" << std::endl; } }; ... std::function<void()> f = &test::testa(); test a; f(a);
|
application
函数映射
class test{ public: test(){ func = {std::bind(&test::testa, this, std::placeholders::_1), std::bind(&test::testb, this, std::placeholders::_1), std::bind(&test::testc, this, std::placeholders::_1)};
for(int i = 0; i < func.size(); ++i){ id2func[1<<i] = func[i]; } }
void print() { id2func[1](1); id2func[2](2); id2func[4](3); }
void testa(int a) { std::cout << a << std::endl; }
void testb(int b) { std::cout << b << std::endl; }
void testc(int c) { std::cout << c << std::endl; }
private: std::vector<std::function<void(int)>> func; std::map<int, std::function<void(int)>> id2func; };
|