Предопределенные арифметические объекты-функции поддерживают операции сложения, вычитания, умножения, деления, взятия остатка и вычисления противоположного по знаку значения. Вызываемый оператор – это экземпляр, ассоциированный с типом 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

*

<p>12.3.3. Сравнительные объекты-функции</p>

Сравнительные объекты-функции поддерживают операции равенства, неравенства, больше, больше или равно, меньше, меньше или равно.

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 );

<p>12.3.4. Логические объекты-функции</p>

Логические объекты-функции поддерживают операции "логическое И" (возвращает 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 );

Логическое НЕ:

Перейти на страницу:

Похожие книги