通过result_of multimap<typename std::result_of<Fn(Person)>::type, Person> std::result_of<Fn(Arg)>::type可以获取function的返回值,没有魔法数,也没有declval繁琐的写法,很优雅。其实,查看源码就知道result_of内部就是通过declval实现的,作法和方式二一样,只是简化了写法。
std::function<int(int)> fr2,那么fr2就可以代表返回值和参数表相同的一类函数。 std::bind用来将可调用对象与其参数一起进行绑定。绑定后可以使用std::function进行保存,并延迟到我们需要的时候调用: (1) 将可调用对象与其参数绑定成一个仿函数; (2) 可绑定部分参数。 在绑定部分参数的时候,通过使用std::placeholders来决定空位参数将会是调用发生时的第几个参数。
A a; // 绑定成员函数,保存为仿函数 std::function<void(int, int)> fr = std::bind(&A::output, &a, std::placeholders::_1, std::placeholders::_2); // 调用成员函数 fr(1, 2); // 绑定成员变量 std::function<int&(void)> fr2 = std::bind(&A::i_, &a); fr2() = 100;// 对成员变量进行赋值 std::cout << a.i_ << std::endl;
时间: 2024-10-20 18:19:09