С++ для начинающих
508 Resource Limit Is Reached

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.

Предопределенные объекты-функции


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

#include <functional>

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

#include <functional>

plus< int > intAdd;

Для выполнения операции сложения мы применяем перегруженный оператор вызова к intAdd точно так же, как и к классу AddImage в предыдущем разделе:

int ival1 = 10, ival2 = 20;

// эквивалентно int sum = ival1 + ival2;

int sum = intAdd( ival1, ival2 );

Реализация шаблона класса plus вызывает оператор сложения, ассоциированный с типом своего параметра – int. Этот и другие предопределенные объекты-функции применяются прежде всего в качестве аргументов обобщенных алгоритмов и обычно замещают подразумеваемую по умолчанию операцию. Например, по умолчанию алгоритм sort() располагает элементы контейнера в порядке возрастания с помощью оператора “меньше” базового типа. Для сортировки по убыванию мы передаем предопределенный шаблон класса greater, который вызывает оператор “больше”:

vector< string > svec;

// ...

sort( svec.begin(), svec.end(), greater<string>() );

508 Resource Limit Is Reached

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.

Предопределенные объекты-функции перечислены в следующих разделах и разбиты на категории: арифметические, логические и сравнительные. Применение каждого из них иллюстрируется как в качестве именованного, так и в качестве безымянного объекта, передаваемого функции. Мы пользуемся следующими определениями объектов, включая и определение простого класса (перегрузка операторов подробно рассматривается в главе 15):

class Int {

public:

   Int( int ival = 0 ) : _val( ival ) {}

   int operator-()          { return -_val;         }

   int operator%(int ival)  { return -_val % ival;  }

   bool operator<(int ival) { return -_val < ival;  }

   bool operator!()         { return -_val == 0;    }

private:

   int _val;

};

vector< string > svec;

string  sval1, sval2, sres;

complex cval1, cval2, cres;

int     ival1, ival2, ires;

Int     Ival1, Ival2, Ires;

double  dval1, dval2, dres;

Кроме того, мы определяем два шаблона функций, которым передаем различные безымянные объекты-функции:

template <class FuncObject, class Type>

   Type UnaryFunc( FuncObject fob, const Type &val )

      { return fob( val ); }

template <class FuncObject, class Type>

   Type BinaryFunc( FuncObject fob,

                    const Type &val1, const Type &val2 )

      { return fob( val1, val2 ); }



Содержание раздела

508 Resource Limit Is Reached

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.