How to use templated stream operators

Templated stream operators are straight forward to use. For example, given the class TSimple defined as:

      
       
      
      class TSimple
          {
    public :
          void InternalizeL(RReadStream& aStream);
          void ExternalizeL(RWriteStream& aStream) const;
          ...
          TInt8     iInt8Value;
          TInt64    iInt64Value;
          TRect     iRectangle;
          TUid      iUid;
          CBufSeg*  iSegBuffer;
          }
     

ExternalizeL() and InternalizeL() might be implemented as:

      
       
      
      void TSimple::ExternalizeL(RWriteStream& aStream) const
          {
          aStream <<  iInt8Value;
          aStream <<  iInt64Value;
          aStream <<  iRectangle
          aStream <<  iUid;
          aStream <<  *iSegBuffer;
          }
     
      
       
      
      void TSimple::InternalizeL(RReadStream& aStream)
          {
          aStream >>  iInt8Value;
          aStream >>  iInt64Value;
          aStream >>  iRectangle
          aStream >>  iUid;
          aStream >>  *iSegBuffer;
          }
     

The templated operators can also be used on an object of type TSimple . For example:

      
       
      
      TSimple simple;
...
aStream << simple;
...
     

The operator<< results in call to TSimple::ExternalizeL() function and this, in turn, calls operator<< on TSimple 's data members.