Betrachten Sie den folgenden Code ein:Ist es möglich, eine Kompilierungszeit "Referenz" zu einer Variablen zu haben?
Matrix4x4 perspective(const ViewFrustum &frustum) {
float l = frustum.l;
float r = frustum.r;
float b = frustum.b;
float t = frustum.t;
float n = frustum.n;
float f = frustum.f;
return {
{ 2 * n/(r - l), 0, (r + l)/(r - l), 0 },
{ 0, 2 * n/(t - b), (t + b)/(t - b), 0 },
{ 0, 0, -((f + n)/(f - n)), -(2 * n * f/(f - n)) },
{ 0, 0, -1, 0 }
};
}
Um die Lesbarkeit des Aufbaus der Matrix zu verbessern, ich habe entweder eine Kopie der Werte aus der Stumpfes Struktur zu machen, oder Verweise auf sie. Ich brauche aber auch keine Kopien oder Indirektionen.
Ist es möglich, eine Art "Referenz" zu haben, die zur Kompilierungszeit aufgelöst wird, ähnlich wie ein symbolischer Link. Es hätte den gleichen Effekt wie:
Matrix4x4 perspective(const ViewFrustum &frustum) {
#define l frustum.l;
#define r frustum.r;
#define b frustum.b;
#define t frustum.t;
#define n frustum.n;
#define f frustum.f;
return {
{ 2 * n/(r - l), 0, (r + l)/(r - l), 0 },
{ 0, 2 * n/(t - b), (t + b)/(t - b), 0 },
{ 0, 0, -((f + n)/(f - n)), -(2 * n * f/(f - n)) },
{ 0, 0, -1, 0 }
};
#undef l
#undef r
#undef b
#undef t
#undef n
#undef f
}
Ohne den Präprozessor (oder ist es akzeptabel?). Ich nehme an, es ist nicht wirklich notwendig oder könnte in diesem speziellen Fall vermieden werden, indem diese 6 Werte direkt zu einer Funktion gemacht werden (obwohl es ein bisschen irritierend wäre, die Funktion so zu bezeichnen - aber selbst dann könnte ich es machen eine Inline-Proxy-Funktion).
Aber ich habe mich nur gefragt, ob das überhaupt möglich ist? Ich konnte nichts dergleichen finden. Ich denke, es würde sich als nützlich erweisen, beschreibende Namen lokal zu kürzen, die sehr oft verwendet werden, ohne die ursprünglichen Namen wirklich zu verlieren.
Sie meinen wie eine Referenz? 'float & l (frustum.l)' usw.? – John3136
@ John3136 ja, aber die eigentliche Referenz wird nicht benötigt –
Wie auch immer Sie es betrachten, es ist völlig eine Mikro-Optimierung, ob Sie eine Kopie erstellen oder eine Referenz verwenden. Der Compiler ist intelligent genug, um Verweise auf diese Variablen zu optimieren. Machen Sie das Beste für die Lesbarkeit. –