[C++] Bedingte std::optional Initialisierung
Verfasst: 23.03.2024, 15:16
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++...
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++...