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.
<< назад вперед >>