PairSelect<int,   CompareLastDigits> Q(123#   98); Q.PrintSmaller();   //  Вывод:   123 return  0; }

Эта программа сначала выводит значение 98.7, потому что оно меньше дру­гого элемента объекта Q - 123.4. После этого она выводит 123, поскольку последняя цифра этого числа - 3 - меньше, чем последняя цифра числа 98. Шаблон less<T>, определенный в STL, очень похож на шаблонный класс LessThan<T> из программы funobj3.cpp. В заголовке functional мож­но найти следующее определение:

template <class T>

struct less: binary_function<T, T, bool> {

bool operator()(const T& x, const T& y) const

{ return x < y;

} };

Единственное отличие этого класса из STL от нашего класса LessThan заклю­чается в том, что класс less наследует от базового класса binary function. Этот класс не содержит никаких членов, за исключением нескольких определений типов с помощью typedef, то же относится к унарному аналогу unary function. Следующие определения этих классов также находятся в заголовке functional:

template  <class Arg,   class  Result> struct  unary_function   {

typedef Arg argument_type;

typedef Result  result_type; };

template <class Argl,   class Arg2,   class  Result> struct binary_function  {

typedef Argl  first_argument_type;

typedef Arg2   second_argument_type; typedef  Result  result_type; };

Для наших теперешних целей мы не используем типы, определенные в этих базовых классах, но они нужны для работы привязок и отрицате­лей, которые рассмотрены далее.

Как можно легко предположить, программа funobj3.cpp будет работать точно так же, если мы заменим наш собственный шаблонный класс LessThan<T> на шаблонный класс STL less<T>. Для этого можно изменить программу следующим образом:

1. В начале текста программы добавить две строки #include <functional> (или ^include <algorithm>) и using namespace std.

2. Убрать определение класса LessThan.

3. Заменить LessThan на less во второй строке функции main.


<< назад вперед >>