Class for implementing several serial ports

This should work, will give error on a serial number not on micro, can modify it to return default when not available if needed.

template< int i_Number > class SerialSelector;
template<> struct SerialSelector< 0 >{ static inline HardwareSerial &Get( void ){ return Serial; } };  
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)    
  template<> struct SerialSelector< 1 >{ static inline HardwareSerial &Get( void ){ return Serial1; } }; 
  template<> struct SerialSelector< 2 >{ static inline HardwareSerial &Get( void ){ return Serial2; } }; 
  template<> struct SerialSelector< 3 >{ static inline HardwareSerial &Get( void ){ return Serial3; } }; 
#endif

Your class

template< int _Serial > class YourClass{

  public:
    YourClass(void) : port( SerialSelector< _Serial >::Get() ) 
      { return; }
  private:

    HardwareSerial &port;
};

P.S. 'this->' is fine, it was implemented for a reason.