Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Boost Function Object Adapter Library

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Improved Function Object Adapters

Заголовок functional.hpp обеспечивает усовершенствования адаптеров функциональных объектов, указанных в Стандартной библиотеке C++ (разделы 20.3.5, до 20.3.8). Улучшения в основном возможны из-за двух изменений:

  1. Мы используем Boostcall_traitsшаблоны, позволяющие избежать проблемыссылок на ссылкии повысить эффективность прохожденияпараметра.
  2. Мы используем двашаблона классов объектов функций, чтобы избежать необходимости вptr_funс адаптерами в этой библиотеке.

Contents

Заголовок содержит следующие шаблоны функций и классов:

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.

Usage

Использование этих адаптеров должно быть почти таким же, как использование стандартных адаптеров объектов функций; единственное различие заключается в том, что вам нужно писать 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 Compatibility

Заголовок и тестовая программа были скомпилированы со следующими компиляторами:

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:
  • Механизмcall_traitsне может предотвратить ссылки на ссылки, и поэтому адаптеры в этой библиотеке будут использоваться в меньшем количестве ситуаций.
  • Механизмfunction_traitsне в состоянии определить типы аргументов и результатов функций, поэтомуptr_funпо-прежнему требуется для адаптации функций.

Future Directions

Основное внимание в этой библиотеке уделяется решению проблемы ссылок на ссылки при сохранении максимальной совместимости со стандартной библиотекой. Это позволяет использовать методы, о которых вы читали в книгах и журналах со многими из современных компиляторов.

В долгосрочной перспективе возможны даже лучшие решения:

  1. Несколько членов Boost работают над библиотеками шаблонов экспрессии. Это позволит использовать более естественный синтаксис для объединения и адаптации функций. Поскольку это новая технология, может пройти некоторое время, прежде чем она созреет и получит широкую поддержку крупных компиляторов. Тем временем библиотека functional.hpp заполняет пробел.
  2. Комитет по стандартизации признал проблему ссылок на ссылки, возникающие во время внедрения шаблонов, и принял решение исправить стандарт (см.С++ стандартный список активных вопросов основного языка).

Author

Марк Роджерс

Acknowledgements

Благодаря Джон Мэддок предложил механизм, позволяющий корректно работать объектам функции. Дженс Маурер предоставил бесценную обратную связь в процессе формального обзора.


Valid HTML 4.01 Transitional

Пересмотрено 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.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:58:46/0.0088808536529541/1