Карта сайта 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

Negators

Заголовокfunctional.hppобеспечивает улучшенные версии обоих адаптеров отрицателя из C++. Стандартная библиотека (§20.3.5):

  • unary_negate
  • Binary_negate

А также соответствующие функции помощника

  • не1
  • не2

Однако отрицатели в этой библиотеке улучшают стандартные версии двумя способами:

  • Они используютпризнаки объекта функции, чтобы избежать необходимостиptr_funпри отрицании функции, а не адаптируемого объекта функции.
  • Они используют Boostcall traits, чтобы определить лучший способ объявить свои аргументы и передать их адаптированной функции (см.ниже).

Usage

Использование аналогично стандартным отрицателям. Например,

bool bad(const Foo &foo) { ... }
...
std::vector<Foo> c;
...
std::find_if(c.begin(), c.end(), boost::not1(bad));

Argument Types

Стандарт C++ (раздел 20.3.5) определяет унарное отрицание так:

template <class Predicate>
  class unary_negate
    : public unary_function<typename Predicate::argument_type,bool> {
public:
  explicit unary_negate(const Predicate& pred);
  bool operator()(const typename Predicate::argument_type& x) const;
};

Обратите внимание, что если аргументПредиката_типявляется ссылкой, тип оператора()Аргументом будет ссылка на ссылку. В настоящее время это незаконно в C++ (но см.C++ стандартный список активных проблем основного языка).

Однако, если мы вместо этого определимоператор()принять аргумент Предиката_тип немодифицированным, это было бы бесполезно неэффективно, если бы это был тип значения; аргумент был бы скопирован дважды - один раз при вызовеunary_negateоператор(), и снова, когдаоператор()называется адаптированной функцией.

Как бы мы хотели доказатьоператору()зависит от того, является ли аргументПредикатассылкой. Если это ссылка, мы хотим объявить ее простоargument_type; если это значение, мы хотим объявить ееconst argument_type&.

Шаблон класса Boostcall_traitsсодержитparam_typetypedef, который использует частичную специализацию для принятия именно этого решения. Если мы объявимоператоракак

bool operator()(typename call_traits<typename Predicate::argument_type>::param_type x) const

Желаемый результат был бы достигнут - мы бы исключили ссылки на ссылки без потери эффективности. На самом деле, фактическая декларация несколько сложнее из-за использования признаков объекта функции, но эффект остается прежним.

Limitations

Как характеристики объекта функции, так и черты вызова, используемые для реализации этих улучшений, зависят от частичной специализации, эти улучшения доступны только на компиляторах, которые поддерживают эту функцию. С другими компиляторами отрицатели в этой библиотеке ведут себя очень похоже на те, что в Стандарте —ptr_funпотребуется адаптировать функции, и ссылок на ссылки не избежать.


Valid HTML 4.01 Transitional

Пересмотрено02 Декабря 200602 December, 2006[ORIG_END] -->

Авторское право и копия; 2000 Cadenza New Zealand Ltd.

Распространяется в соответствии с лицензией Boost Software License, Version 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 22:44:35/0.0066449642181396/0