| | | | | |

Optimization - 1: Cost of Forwarding

  template parameter T     TypeTraits<T>::ParameterType  
  U  U if U is primitive; otherwise const U&  
  const U  U if U is primitive; otherwise const U&  
  U&  U&  
  const U&  const U&  
class TypeTraits
{
...
  template <class U> struct ReferenceTraits
  {
    enum { result = false };
    typedef U ReferredType;
  };
        
  template <class U> struct ReferenceTraits<U&>
  {
    enum { result = true };
    typedef U ReferredType;
  };
  ...        
public:
  ...
  enum { isReference = ReferenceTraits<T>::result };
  typedef typename ReferenceTraits<T>::ReferredType ReferredType;
  ...
};

| | Top of Page | 8. Generalized Functors - 23 of 26