Spec-Zone .ru
спецификации, руководства, описания, API
ADC домой > Ссылочная библиотека> Ссылка> Дарвин> Разное пространство пользователя ссылка API

 


stl_function.h

Введение

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



Классы

binder1st
mem_fun_t
pointer_to_unary_function
unary_negate


Функции

оператор _Identity
оператор equal_to
оператор logical_and
оператор плюс

оператор _Identity


template <class _Tp> struct _Identity : public unary_function<_Tp,_Tp> { 
    _Tp& operator()(
        _Tp& __x) const ;
Обсуждение

@}


оператор equal_to


// 20.3.3 comparisons 
/** @defgroup s20_3_3_comparisons Comparison Classes
The library provides six wrapper functors for all the basic comparisons
in C++, like @c <.

@{
    */
/// One of the @link s20_3_3_comparisons comparison functors@endlink. 
template <class _Tp> struct equal_to : public binary_function<_Tp, _Tp, bool> { 
    bool operator()(
        const _Tp& __x,
        const _Tp& __y) const ;
Обсуждение

@}


оператор logical_and


// 20.3.4 logical operations 
/** @defgroup s20_3_4_logical Boolean Operations Classes
Here are wrapper functors for Boolean operations: @c &&, @c ||, and @c !.

@{
    */
/// One of the @link s20_3_4_logical Boolean operations functors@endlink. 
template <class _Tp> struct logical_and : public binary_function<_Tp, _Tp, bool> { 
    bool operator()(
        const _Tp& __x,
        const _Tp& __y) const ;
Обсуждение

@}


оператор плюс


// 20.3.2 arithmetic 
/** @defgroup s20_3_2_arithmetic Arithmetic Classes
Because basic math often needs to be done during an algorithm, the library
provides functors for those operations. See the documentation for
@link s20_3_1_base the base classes@endlink for examples of their use.

@{
    */
/// One of the @link s20_3_2_arithmetic math functors@endlink. 
template <class _Tp> struct plus : public binary_function<_Tp, _Tp, _Tp> { 
    _Tp operator()(
        const _Tp& __x,
        const _Tp& __y) const ;
Обсуждение

@}

Определения типов


binary_function


template <class _Arg1, class _Arg2, class _Result> struct binary_function { 
    typedef _Arg1 first_argument_type; ///< the type of the first argument 
    /// (no surprises here)  
    typedef _Arg2 second_argument_type; ///< the type of the second argument 
    typedef _Result result_type; ///< type of the return type 
};  
Обсуждение

Это - одна из основы функтора classes@endlink.


unary_function


/**
This is one of the @link s20_3_1_base functor base classes@endlink.
    */
template <class _Arg, class _Result> struct unary_function { 
    typedef _Arg argument_type; ///< @c argument_type is the type of the 
    /// argument (no surprises here)  
    typedef _Result result_type; ///< @c result_type is the return type 
};  
Обсуждение

Функциональные объекты @defgroup s20_3_1_base Базовых классов Функтора или @e функторы, являются объектами с @c оператором () определенный и доступный. Они могут передаваться как параметры шаблонам алгоритма и использоваться вместо указателя функции. Не только получающаяся выразительность увеличенной библиотеки, но сгенерированный код может быть более эффективным, чем, что Вы могли бы записать вручную. Когда мы обращаемся к «функторам», тогда, обычно мы включаем указатели функции в описание также.

Часто, функторы только создаются, поскольку временные файлы передали вызовам алгоритма, вместо того, чтобы быть созданными как названные переменными.

Два примера, взятые от самого стандарта, следуют. Чтобы выполнить добавление элементом двух векторов, @c a и @c b содержащий @c дважды, и поместить результат в @c a, используют \code, преобразовывают (a.begin (), a.end (), b.begin (), a.begin (), плюс ()); \endcode Для отрицания каждого элемента в @c a используйте \code, преобразовывают (a.begin (), a.end (), a.begin (), инвертируйте ()); \endcode дополнение и функции отрицания будет встроен непосредственно.

Стандарт functiors получен из структур, названных @c unary_function и @c binary_function. Эти два класса содержат только определения типов, для помощи в универсальном (шаблон) программированию. Если Вы пишете свои собственные функторы, Вы могли бы рассмотреть выполнение того же.

@{

Последнее обновление: 20.06.2006