May 10, 200719 yr Implement binary operator overlaods in terms of the class's unary operators.For example, operator+ for both precision_timer and double types can be implemented in terms of operator+= and using the return value optimization, thus: class PTimer{ ... PTimer& operator+=( const PTimer& right_arg ); ...};const PTimer operator+( const PTimer& left_arg, const PTimer& right_arg ){ // Create an un-named temporary making it eligible // for return value optimisation by the compiler. return PTimer(left_arg) += right_arg;}const PTimer operator+( const PTimer& left_arg, const double right_arg ){ // Construct with the passed double return PTimer( left_arg ) += PTimer( right_arg ); }Such an approach avoids the need for standalone binary operators to lever open the class encapsulation with the, so-called, 'friend' keyword. Further, it means that only the unary assignment operators need to be maintained.
Create an account or sign in to comment