![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Boost Function Object Adapter LibraryBoost , ,
|
Function object traits | unary_traits binary_traits |
Used to determine the types of function objects' and functions' arguments. Eliminate the necessity for ptr_fun. |
---|---|---|
Negators | unary_negate binary_negate not1 not2 |
Based on section 20.3.5 of the standard. |
Binders | binder1st binder2nd bind1st bind2nd |
Based on section 20.3.6 of the standard. |
Adapters for pointers to functions | pointer_to_unary_function pointer_to_binary_function ptr_fun |
Based on section 20.3.7 of the standard. Not required for use with this library since the binders and negators can adapt functions, but may be needed with third party adapters. |
Adapters for pointers to member functions | mem_fun_t mem_fun1_t const_mem_fun_t const_mem_fun1_t mem_fun_ref_t mem_fun1_ref_t const_mem_fun_ref_t const_mem_fun1_ref_t mem_fun mem_fun_ref |
Based on section 20.3.8 of the standard. |
Использование этих адаптеров должно быть почти таким же, как использование стандартных адаптеров объектов функций; единственное различие заключается в том, что вам нужно писать boost:: вместо std:::, и что у вас будет меньше головных болей.
Например, предположим, что у вас был класс Person, который содержал функцию set_name:
class Person { public: void set_name(const std::string &name); // ... };
Вы можете переименовать группу людей в коллекцию c, написав
std::for_each(c.begin(), c.end(), boost::bind2nd(boost::mem_fun_ref(&Person::set_name), "Fred"));
Если бы вместо этого использовались стандартные адаптеры, этот код обычно не компилировался бы, потому что set_name Приведем справочный аргумент. Обратитесь к комментариям в документации binder, чтобы объяснить, почему это так.
Заголовок и тестовая программа были скомпилированы со следующими компиляторами:
Compiler | Comments |
---|---|
Borland C++Builder 4 Update 2 | No known issues. |
Borland C++ 5.5 | No known issues. |
g++ 2.95.2 | No known issues. |
Microsoft Visual C++ Service Pack 3 |
Compiler lacks partial specialisation, so this library offers little
more than is provided by the standard adapters:
|
Основное внимание в этой библиотеке уделяется решению проблемы ссылок на ссылки при сохранении максимальной совместимости со стандартной библиотекой. Это позволяет использовать методы, о которых вы читали в книгах и журналах со многими из современных компиляторов.
В долгосрочной перспективе возможны даже лучшие решения:
Благодаря Джон Мэддок предложил механизм, позволяющий корректно работать объектам функции. Дженс Маурер предоставил бесценную обратную связь в процессе формального обзора.
Пересмотрено 02 Декабрь 200602 December, 2006[ORIG_END] -->
Copyright © 2000 Cadenza New Zealand Ltd.
Распространяется в соответствии с Лицензией на программное обеспечение Boost версии 1.0. (См. сопроводительный файл LICENSE_1_0.txt или копию по адресу http://www.boost.org/LICENSE_1_0.txt)
Статья Boost Function Object Adapter Library раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |