Ich habe die folgenden zwei Gewerkschaften:Rund Cast-Operatoren zwischen zwei Gewerkschaften
union rgb_color
{
struct {
float red;
float green;
float blue;
};
float raw[3];
};
union hsv_color
{
struct {
float hue;
float saturation;
float value;
};
float raw[3];
}
Ich möchte operator hsv_color()
-rgb_color
union
hinzuzufügen, und operator rgb_color()
-hsv_color
union
. Gibt es einen Weg, es zu tun? Wenn ich hsv_color
voraus erklären, führt der Compiler den folgenden Fehler:
error: return type 'union hsv_color' is incomplete
Je mehr ich versuche, dies zu implementieren, desto mehr ich denke, ich sollte nur für die Konvertierung zwei Funktionen erstellen, anstatt mit impliziten Besetzung Betreiber. Dennoch würde ich gerne wissen, ob das möglich ist. Irgendwelche Vorschläge?
Ich hoffe, dass Sie nicht mit diesen Gewerkschaften Typ-Puning tun: zum Beispiel das Schreiben in die 'raw' und dann von' Farbton lesen 'und umgekehrt ist UB –
@Revolver_Ocelot: Wenn du bei UB undefiniertes Verhalten meinst, dann verdammt, wusste das nicht! Ist das nur in C++ oder auch in C? – xx77aBs
das ist, wie Gewerkschaften arbeiten, wenn Sie "roh" und "Farbton" zur gleichen Zeit brauchen, vielleicht sollte es nicht eine Union in erster Linie sein – user463035818