Moin,
ich habe ein std::optional<RandomSound> sound; Objekt, dass ich in meinem Konstruktor initialisieren möchte. RandomSound erfordert zwingend Konstruktorparameter, kann also nicht leer sein, daher der optional-Wrapper. RandomSound hat darüber hinaus auch keinen Zuweisungsoperator. Also muss ich das Objekt direkt im Konstruktor initialisieren:
sound( should_load_sound ? {filename} : std::nullopt),
Das geht nicht, weil beim tenären Operator wohl beide Pfade den selben Typen haben müssen, d.h. es können wohl nicht unterschiedliche optional-Konstruktoren aufgerufen werden.
Siehe dazu auch: https://giodicanio.com/2024/01/12/subtl ... -operator/
Wars das jetzt also für mich, solange sich das RandomSound Interface nicht verändert? Die naheliegende Lösung ist natürlich einfach zu einem unique_ptr zu wechseln, aber dann hab ich halt immer eine zusätzlich Indirektion, ist also weniger effizient. Finde ich gerade ein bisschen blöde von C++...
[C++] Bedingte std::optional Initialisierung
[C++] Bedingte std::optional Initialisierung
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
- Schrompf
- Moderator
- Beiträge: 5040
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: [C++] Bedingte std::optional Initialisierung
Hö? Default-konstruiere den Sound, und wenn's dann soweit ist, konstruierst Du mit emplace() das Objekt im optional
Code: Alles auswählen
std::optional<Sound> sound{};
...
...
sound.emplace(filename);
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Re: [C++] Bedingte std::optional Initialisierung
Huh, ja gut, das war einfach :)
thx!
thx!
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/