|
Программирование >> Инициализация объектов класса, структура
modulus<Int> IntModulus; ln1 no ! Tлr 1 Ires = IntModulus( Ival1, Ival2 ); ires = BinaryFunc( modulus<int>(), ival1, ival2 ); negate<int> intNegate; ires = intNegate( ires ); Вычисление противоположного значения: negate<Type> Ires = UnaryFunc( negate<Int>(), Ival1 ); 12.3.3. Сравнительные объекты-функции Сравнительные объекты-функции поддерживают операции равенства, неравенства, больше, больше или равно, меньше, меньше или равно. equal to<string> stringEqual; sres = stringEqual( sval1, sval2 ); ires = count if( svec.begin(), svec.end(), Равенство: equal to<Type> equal to<string>(), sval1 ); not equal to<complex> complexNotEqual; cres = complexNotEqual( cval1, cval2 ); ires = count if( svec.begin(), svec.end(), Неравенство: not equal to<Type> not equal to<string>(), sval1 ); greater<int> intGreater; ires = intGreater( ival1, ival2 ); ires = count if( svec.begin(), svec.end(), Больше: greater<Type> greater<string>(), sval1 ); greater equal<double> doubleGreaterEqual; dres = doubleGreaterEqual( dval1, dval2 ); ires = count if( svec.begin(), svec.end(), Больше или равно: greater equal<Type> less<Int> IntLess; Ires = IntLess( Ival1, Ival2 ); ires = count if( svec.begin(), svec.end(), Меньше: less<Type> less<string>(), sval1 ); less equal<int> intLessEqual; ires = intLessEal( ival1, ival2 ); ires = count if( svec.begin(), svec.end(), Меньше или равно: less equal<Type> less equal<string>(), sval1 ); 12.3.4. Логические объекты-функции Логические объекты-функции поддерживают операции логическое И (возвращает true, если оба операнда равны true, - применяет оператор &&, ассоциированный с типом Type), логическое ИЛИ (возвращает true, если хотя бы один из операндов равен true, - применяет оператор , ассоциированный с типом Type) и логическое НЕ (возвращает true, если операнд равен false, - применяет оператор !, ассоциированный с типом Type) logical and<int> intAnd; ires = intLess( ival1, ival2 ); Логическое И: logical and<Type> dres = BinaryFunc( logical and<double>(), dval1, dval2 ); logical or<int> intSub; ires = intSub( ival1, ival2 intSub( ival1, ival2 ); Логическое ИЛИ: logical or<Type> dres = BinaryFunc( logical or<double>(), dval1, dval2 ); logical not<Int> IntNot; ires = IntNot( Ival1, Ival2 IntNot( Ival1, Ival2 ); Логическое НЕ: logical not<Type> dres = UnaryFunc( logical or<double>(), dval1 ); greater equal <string>(), sval1 ); count if( vec.begin(), vec.end(), алгоритму count if() следующее: bind2nd( less eal<int>(), 10 )); В стандартной библиотеке также есть два предопределенных адаптера-отрицателя: not1 и not2. not1 инвертирует значение истинности унарного предиката, являющегося объектом-функцией, а not2 - значение бинарного предиката. Для отрицания рассмотренного выше связывателя объекта-функции less equal можно написать count if( vec.begin(), vec.end(), следующее: not1( bind2nd( less eal<int>(), 10 ))); Другие примеры использования связывателей и отрицателей приведены в Приложении, вместе с примерами использования каждого алгоритма. 12.3.6. Реализация объекта-функции При реализации программы в разделе 12.2 нам уже приходилось определять ряд объектов-функций. В этом разделе мы изучим необходимые шаги и возможные вариации при определении класса объекта-функции. (В главе 13 определение класса рассматривается детально; в главе 15 обсуждается перегрузка операторов.) 12.3.5. Адаптеры функций для объектов-функций В стандартной библиотеке имеется также ряд адаптеров функций, предназначенных для специализации и расширения как унарных, так и бинарных объектов-функций. Адаптеры - это специальные классы, разбит1е на следующие две категории: связыватели (binders). Это адаптеры, преобразующие бинарный объект-функцию в унарный объект, связывая один из аргументов с конкретным значением. Например, для подсчета в контейнере всех элементов, которые меньше или равны 10, следует передать алгоритму count if() объект-функцию less equal, один из аргументов которого равен 10. В следующем разделе м1 покажем, как это сделать; отрицатели (negators). Это адаптеры, изменяющие значение истинности объекта-функции на противоположное. Например, для подсчета всех элементов внутри контейнера, которые больше 10, мы могли бы передать алгоритму count if() отрицатель объекта-функции less equal, один из аргументов которого равен 10. Конечно, в данном случае проще передать связыватель объекта-функции greater, ограничив один из аргументов со значением 10. В стандартную библиотеку входит два предопределенных адаптера-связывателя: bind1st и bind2nd, причем bind1st связывает некоторое значение с первым аргументом бинарного объекта-функции, а bind2nd - со вторым. Например, для подсчета внутри контейнера всех элементов, которые меньше или равны 10, мы могли бы передать
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |