Предопределенные арифметические объекты-функции поддерживают операции сложения, вычитания, умножения, деления, взятия остатка и вычисления противоположного по знаку значения. Вызываемый оператор – это экземпляр, ассоциированный с типом Type. Если тип является классом, предоставляющим перегруженную реализацию оператора, то именно эта реализация и вызывается.
plusstring stringAdd;
// вызывается string::operator+()
sres = stringAdd( sval1, sval2 );
Сложение:
plusType
*
dres = BinaryFunc( plusdouble(), dval1, dval2 );
minusint intSub;
ires = intSub( ival1, ival2 );
Вычитание:
minusType
*
dres = BinaryFunc( minusdouble(), dval1, dval2 );
multipliescomplex complexMultiplies;
cres = complexMultiplies( cval1, cval2 );
Умножение:
multipliesType
*
dres = BinaryFunc( multipliesdouble(), dval1, dval2 );dividesint intDivides;
ires = intDivides( ival1, ival2 );
Деление:
dividesType
dres = BinaryFunc( dividesdouble(), dval1, dval2 );
Взятие остатка:
modulusType
*
modulusInt IntModulus;
Ires = IntModulus( Ival1, Ival2 );
ires = BinaryFunc( modulusint(), ival1, ival2 );
negateint intNegate;
ires = intNegate( ires );
Вычисление противоположного значения:
negateType
*
12.3.3. Сравнительные объекты-функции
Сравнительные объекты-функции поддерживают операции равенства, неравенства, больше, больше или равно, меньше, меньше или равно.
equal_tostring stringEqual;
sres = stringEqual( sval1, sval2 );
ires = count_if( svec.begin(), svec.end(),
Равенство:
equal_toType
*
equal_tostring(), sval1 );
not_equal_tocomplex complexNotEqual;
cres = complexNotEqual( cval1, cval2 );
ires = count_if( svec.begin(), svec.end(),
Неравенство:
not_equal_toType
*
not_equal_tostring(), sval1 );
greaterint intGreater;
ires = intGreater( ival1, ival2 );
ires = count_if( svec.begin(), svec.end(),
Больше:
greaterType
*
greaterstring(), sval1 );
greater_equaldouble doubleGreaterEqual;
dres = doubleGreaterEqual( dval1, dval2 );
ires = count_if( svec.begin(), svec.end(),
Больше или равно:
greater_equalType
*
greater_equal string(), sval1 );
lessInt IntLess;
Ires = IntLess( Ival1, Ival2 );
ires = count_if( svec.begin(), svec.end(),
Меньше:
lessType
*
lessstring(), sval1 );
less_equalint intLessEqual;
ires = intLessEqual( ival1, ival2 );
ires = count_if( svec.begin(), svec.end(),
Меньше или равно:
less_equalType
*
less_equalstring(), sval1 );
12.3.4. Логические объекты-функции
Логические объекты-функции поддерживают операции "логическое И" (возвращает true, если оба операнда равны true, – применяет оператор &&, аcсоциированный с типом Type), "логическое ИЛИ" (возвращает true, если хотя бы один из операндов равен true, – применяет оператор ||, аcсоциированный с типом Type) и "логическое НЕ" (возвращает true, если операнд равен false, – применяет оператор !, аcсоциированный с типом Type)
logical_andint intAnd;
ires = intLess( ival1, ival2 );
Логическое И:
logical_andType
*
dres = BinaryFunc( logical_anddouble(), dval1, dval2 );
logical_orint intSub;
ires = intSub( ival1, ival2 );
Логическое ИЛИ:
logical_orType
*
dres = BinaryFunc( logical_ordouble(), dval1, dval2 );
logical_notInt IntNot;ires = IntNot( Ival1, Ival2 );
Логическое НЕ: