Ich habe einen enum-Parameter in einem C++ - Programm, das ich mit einer Funktion erhalten muss, die den Wert über einen Parameter zurückgibt. Ich begann damit, es als Int zu deklarieren, aber bei der Code-Überprüfung wurde gebeten, es als enum (ControlSource) einzugeben. Ich tat dies, aber es bricht die Get() -Funktion - ich bemerkte, dass eine C-Style-Umwandlung in int & das Problem löst, aber als ich zuerst versuchte, es mit einem static_cast zu beheben <> kompilierte es nicht.Warum kann ich static_cast <int&> nicht verwenden, um einen Integer-Referenzparameter an eine Funktion in C++ zu übergeben?
Warum ist das, und warum ist es so, dass wenn eTimeSource ein int war, überhaupt kein Casting erforderlich ist, um die ganze Zahl als Referenz zu übergeben?
//GetCuePropertyValue signature is (int cueId, int propertyId, int& value);
ControlSource eTimeSource = ControlSource::NoSource;
pPlayback->GetCuePropertyValue(programmerIds.cueId, DEF_PLAYBACKCUEPROPERTY_DELAY_SOURCE, static_cast<int&>(eTimeSource)); //This doesn't work.
pPlayback->GetCuePropertyValue(programmerIds.cueId, DEF_PLAYBACKCUEPROPERTY_DELAY_SOURCE, (int&)(eTimeSource)); //This does work.
int nTimeSource = 0;
pPlayback->GetCuePropertyValue(blah, blah, nTimeSource); //Works, but no (int&) needed... why?
„Works, aber kein (int &) benötigt ... warum?“ Nehmen - Sehen Sie in der C++ - Dokumentation nach, wie Sie Variablen per Referenz übergeben (oder siehe hier: http://stackoverflow.com/a/410857/1174378) –
Entfernen Sie die doppelten Klammern. Bin ich richtig in der Vermutung, dass die C-Stil-Besetzung einen reinterpret_cast für dieses Objekt aufruft, damit es funktioniert? Wenn ja, ist es wirklich wichtig für eine Enumeration, die auf dem Int-Typ basiert? – Gareth
Nein, "reinterpret_cast" ist nicht dasselbe wie ein "Vorschlaghammer" im C-Stil. Wenn Sie einen hässlichen Hacky Cast benötigen, um den Code nach dem Ändern des Typs funktionieren zu lassen, dann ändern Sie den Typ nicht! Es funktioniert OK mit 'int', es funktioniert nicht OK mit einer enum ...scheint ziemlich klar, was die Antwort zu mir ist –