![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Boost Function Object Adapter LibraryBoost , ,
|
Type | Contents | Description |
---|---|---|
template <typename T> struct unary_traits |
function_type | The type of the function or function object itself (i.e., T). |
param_type | The type that should be used to pass the function or function object as a parameter. | |
result_type | The type returned by the function or function object. | |
argument_type | The type of the argument to the function or function object. | |
template <typename T> struct binary_traits |
function_type | The type of the function or function object itself (i.e., T). |
param_type | The type that should be used to pass the function or function object as a parameter. | |
result_type | The type returned by the function or function object. | |
first_argument_type | The type of the first argument to the function or function object. | |
second_argument_type | The type of the second argument to the function or function object. |
Unary_traitsдолжна быть выполнена либо функция, принимающая один параметр, либо адаптируемый унарный объект функции (т.е. класс, полученный изstd::unary_function).или тот, который предоставляет те же самые теги. (См. раздел 20.3.1 стандарта C++.)
Бинарные чертыдолжен быть инстанцирован либо функцией, принимающей два параметра, либо адаптируемым объектом двоичной функции (т.е. классом, полученным изstd::binary_function).или тот, который предоставляет те же самые теги. (См. раздел 20.3.1 стандарта C++.)
Наиболее распространенным использованием этих шаблонов являются адаптеры функциональных объектов, что позволяет им адаптировать простые функции, а также функциональные объекты. Вы можете сделать это везде, где вы обычно пишете.
typename Operation::argument_type
Просто писать
typename boost::unary_traits<Operation>::argument_type
Вместо этого.
В дополнение к стандартным шаблонам результатов и аргументов эти шаблоны признаков определяют два дополнительных типа.
Это тип функции или объекта функции и может использоваться в таких заявлениях, как:
template <class Predicate> class unary_negate : // ... { // ... private: typename unary_traits<Predicate>::function_type pred; };
Если бы этот типдеф не был предоставлен, было бы невозможно объявитьpredтаким образом, чтобыunary_negateбыл инстанциирован с типом функции (см. C++ Standard §14.3.1 ¶3).
Этот тип подходит для передачи функции или объекта функции в качестве параметра другой функции. Например,
template <class Predicate> class unary_negate : // ... { public: explicit unary_negate(typename unary_traits<Predicate>::param_type x) : pred(x) {} // ... };
Функциональные объекты передаются по ссылке на const; указатели функций передаются по значению.
Эта библиотека использует эти черты во всех адаптерах функциональных объектов, теоретически делаяptr_funустаревшими. Однако сторонние адаптеры, вероятно, не воспользуются этим механизмом, и поэтомуptr_funвсе еще может потребоваться. Соответственно, эта библиотека также предоставляетулучшенные версии стандартных адаптеров указателей функций.
Эти шаблоны черт также не будут работать с компиляторами, которые не поддерживают частичную специализацию шаблонов. С помощью этих компиляторов шаблоны признаков могут быть инстанцированы только с адаптируемыми функциональными объектами, что требует использованияptr_fun, даже с адаптерами функциональных объектов в этой библиотеке.
Пересмотрено02 Декабря 200602 December, 2006[ORIG_END] -->
Авторское право и копия; 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.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |