![]() |
![]() ![]() ![]() ![]() |
![]() |
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.
:: Главная :: ::
реклама |