Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

reference_wrapper::operator()

公共成员函数  <functional>

template <class... ArgTypes>
  typename result_of<type&(ArgTypes&&...)>::type
    operator() (ArgTypes&&... args) const;

访问元素(函数形式)
访问被引用的元素。

效果取决于reference_wrapper对象所引用的类型(即它的类模板形参T,别名为成员类型):


☲  参数


args...
调用的参数。
如果type是成员指针,则第一个参数应为该成员定义的对象(或引用,或指向该成员的指针)。

☉  返回值



如果函数执行一个函数调用,它将返回该函数的返回值。
否则,它返回对被访问成员的引用。
type是描述所引用类型的成员类型(它是类模板形参T的别名)。

☣  示例



// reference_wrapper::operator()
#include <iostream>     // std::cout
#include <functional>   // std::reference_wrapper, std::plus

struct AB {
  int a,b;
  int sum() {return a+b;}
};

 int ten() {return 10;}            // function

int main () {
  std::plus<int> plus_ints;        // function object
  int AB::* p_a = &AB::a;          // pointer to data member
  int(AB::* p_sum)() = &AB::sum;   // pointer to member function

  // construct reference_wrappers using std::ref:
  auto ref_ten = std::ref(ten);             // function
  auto ref_plus_ints = std::ref(plus_ints); // function object
  auto ref_AB_sum = std::ref(p_sum);        // pointer to member function
  auto ref_AB_a = std::ref(p_a);            // pointer to data member

  AB ab {100,200};

  // invocations:
  std::cout << ref_ten() << '\n';
  std::cout << ref_plus_ints(5,10) << '\n';
  std::cout << ref_AB_sum(ab) << '\n';
  std::cout << ref_AB_a( ab) << '\n';
  std::cout << ref_AB_a(&ab) << '\n';       // (also ok with pointer)

  return 0;
}

输出:
10
15
300
100
100

⇄ 数据竞争



同时访问对象及其引用的元素。

☂ 异常安全性



提供与访问的元素相同的级别。

🍄  另请参阅



reference_wrapper::get 访问元素(公共成员函数)
reference_wrapper::operator type& 引用反射(公共成员函数)

联系我们 免责声明 关于CandCplus 网站地图