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.