Wie würde man Swizzling als definiertes Verhalten in einer Programmiersprache schreiben? (swizzling members wie Matrizen und Vektoren in GLSL) Also, wenn ich eine Programmiersprache erstellen wollte, die die Definition von swizzling auf einigen Mitgliedern erlauben würde, was wäre ein guter Weg, es zu tun? Also zum Beispiel könnte ich das tun:Programmgesteuertes Swizzling definieren (wie in GLSL)
struct
{
swizzable
{
float x, float y, float z, float w
}
}
Aber das ist eine Menge fehlt. Zum Beispiel definiert es nicht, was es zurückgeben würde, wenn ich mehr oder weniger Elemente swizzle oder einer Untermenge oder nur den Elementen rückwärts zuteile. Wie in GLSL kann ich v.xyz verwenden, um einen Vec3 aus einem Vec4 namens v zu erstellen. Oder ich könnte eine Teilmenge von Mitgliedern zuweisen: v.zyx = ... in beliebiger Reihenfolge.
Also diese swizzable Substruktur ist keine Lösung (oder zumindest zu begrenzt). Eine andere Möglichkeit wäre eine Reihe von umgestellt Mitglieder und eine implizite Umwandlung zurückzukehren (mit einem Konstruktor) würde das gewünschte Element erzeugen:
struct Vec2
{
swizzable { float x, float y }
Vec2(float[2] elements)
{ x = elements[0]; y = elements[1]; }
}
struct Vec3
{
swizzable { float x, float y, float z }
}
Also, wenn ich ein vec3 der x und y über Swizzling zugegriffen wird, würde ich einen Schwimmer bekommen [2] und weil ich einen Konstruktor für Vec2 habe, kann ich ihm dieses Array zuweisen (und implizit ein vec2 instantiieren).
Dies sieht wie eine bessere Lösung aus, aber immer noch: Wie könnte man es besser machen?
Bearbeiten: Sorry, ich habe die Frage nicht angegeben: Ich möchte eine Programmiersprache implementieren, die diese Art von Sache unterstützt.
Ich bin mir nicht sicher, was Sie hier fragen. Fragen Sie, wie man eine Programmiersprache entwickelt, die solche Dinge erlaubt? Oder fragen Sie sich, wie Sie dieses Verhalten in einer bestimmten Programmiersprache implementieren können? Oder fragen Sie, wie Sie es in einer Programmiersprache implementieren, aber Sie haben keine bestimmte Programmiersprache im Kopf? –
@TannerSwett Der erste. Tut mir leid, dass ich das nicht angegeben habe. Ich möchte eine Programmiersprache erstellen, die dies unterstützt. –
Das ist eine schwierige Frage, denn die Art und Weise, wie Sie diese Funktion implementieren, hängt davon ab, wie Sie alle anderen Funktionen implementieren. –