enum



  • hi,

    ich habe laut USB-Spezifikation eine enum mit diversen werten:

    typedef enum _USBRequestCode
    {
      rcGetStatus    = 0x00,
      rcClearFeature = 0x01,
      ...
    } USBRequestCode;
    

    nun implementiere ich gerade PTP und dort werden die RequestCodes erweitert, die fuer USB gueltigen Codes sind aber auch fuer PTP gueltig:

    typedef enum _PTPRequestCode
    {
      rcCancelRequest = 0x64,
      ...
    } PTPRequestCode;
    

    wie kann ich PTPRequestCode definieren, dass ich dort auch die Code von USBRequestCode drin habe, ohne dabei alle neu zu definieren?

    typedef enum _AlleCodes
    {
      USBRequestCodes,
      PTPRequestCodes,
      ...
    } AlleCodes;
    


  • Afaik geht das nicht. Ich könnte mir aber vorstellen, dass folgendes dein Problem umgehen kann:

    class AlleCodes
    {
    private:
    	union
    	{
    		USBRequestCode usb_;
    		PTPRequestCode ptp_;
    	};
    public:
    	AlleCodes& operator =(const USBRequestCode& rhs)
    	{
    		usb_ = rhs;
    		return *this;
    	}
    	AlleCodes& operator =(const PTPRequestCode& rhs)
    	{
    		ptp_ = rhs;
    		return *this;
    	}
    	operator USBRequestCode() const
    	{
    		return usb_;
    	}
    	operator PTPRequestCode() const
    	{
    		return ptp_;
    	}
    	AlleCodes(USBRequestCode source)
    		: usb_(source)
    	{
    	}
    	AlleCodes(PTPRequestCode source)
    		: ptp_(source)
    	{
    	}
    };
    

    Einfacher gehts wohl nur noch mit boost::variant, falls das zur Verfügung steht.


Anmelden zum Antworten