首页 > 代码库 > 代码中C++11一些新的特性

代码中C++11一些新的特性

 

通过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;

 

代码中C++11一些新的特性