Из документации Boost.Ref :
Цель
boost :: reference_wrapper должен
содержать ссылку на объект
тип Т. Он в основном используется для «кормления»
ссылки на шаблоны функций
(алгоритмы), которые принимают их параметр
по значению.
Примечание: важное различие между boost::reference_wrapper
и std::reference_wrapper
(по крайней мере, в Boost 1.52) заключается в способности std::reference_wrapper
идеально обернуть функциональные объекты.
Это разрешает код, подобный этому:
// functor that counts how often it was applied
struct counting_plus {
counting_plus() : applications(0) {}
int applications;
int operator()(const int& x, const int& y)
{ ++applications; return x + y; }
};
std::vector<int> x = {1, 2, 3}, y = {1, 2, 3}, result;
counting_plus f;
std::transform(begin(x), end(x), begin(y),
std::back_inserter(result), std::ref(f));
std::cout << "counting_plus has been applied " << f.applications
<< " times." << '\n';