Заголовок functional.hpp предоставляет расширенные версии обоих адаптеров объекта связующей функции от C++. Стандартная библиотека (раздел 20.3.6):
связующее1-е
связующее2nd
А также соответствующие функции помощника
связь1st
связь2nd
Ключевое преимущество этих адаптеров перед теми, которые находятся в Стандартной библиотеке, заключается в том, что они избегают проблемы ссылок на ссылки.
Usage
Использование идентично стандартным связующим. Например,
Если бы это было написано с использованием std::bind2nd и std::mem_fun_ref, вряд ли это было бы компиляцией.
Проблема возникает потому, что bar принимает опорный аргумент. Стандарт определяет std::mem_fun_ref таким образом, что он создает объект функции, чей second_argument_type будет std::ostream&.
Призыв к bind2nd создает binder2nd, который Стандарт определяет следующим образом:
Поскольку тип second_argument_typestd::ostream&, тип y в конструкторе будет std::ostream&&. Поскольку вы не можете иметь ссылку на ссылку, на этом этапе мы должны получить ошибку компиляции, потому что ссылки на ссылки являются незаконными в C++ (но см. C++). Стандартный список активных языковых вопросов .
Вяжущие в этой библиотеке избегают этой проблемы, используя шаблоны Boost call_traits.
Статья Boost Function Object Adapter Library раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.