Ho un parametro enum in un programma C++ che ho bisogno di ottenere usando una funzione che restituisce il valore attraverso un parametro. Ho iniziato dichiarandolo come int ma alla revisione del codice è stato chiesto di digitarlo come enum (ControlSource). L'ho fatto ma interrompe la funzione Get(): ho notato che un cast di tipo C su int & risolve il problema, ma quando ho provato a risolverlo con un static_cast <> non è stato compilato.Perché non posso usare static_cast <int&> per passare un parametro di riferimento intero a una funzione in C++?
Perché è questo, e perché è che quando eTimeSource è stato un int non è richiesta alcuna trasmissione per passare l'intero per riferimento?
//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?
"Opere, ma nessuna (int &) necessario ... perché?" - Dai un'occhiata alla documentazione del C++ riguardante il passaggio delle variabili per riferimento (o vedi qui: http://stackoverflow.com/a/410857/1174378) –
Rimosso le parentesi doppie. Ho ragione nel presumere che il cast in stile C stia chiamando un reinterpret_cast su questo oggetto per farlo funzionare? Se è così, è davvero importante per un enum basato sul tipo int comunque? – Gareth
No, 'reinterpret_cast' non è lo stesso di un cast di tipo" mazza ". Se hai bisogno di un brutto cast hacky per far funzionare il codice dopo aver cambiato il tipo, non cambiare il tipo! Funziona bene con 'int', non funziona OK con un enum ...sembra abbastanza chiaro quale sia la risposta per me –