Rozważmy następujący kod:Czy można mieć "odniesienie" do zmiennej w czasie kompilacji?
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 }
};
}
W celu poprawienia czytelności konstruowaniu macierzy, muszę też zrobić kopię wartości z struct ściętego lub odnośniki do nich. Jednak nie potrzebuję też kopii ani pośrednictwa.
Czy możliwe jest posiadanie jakiegoś "odniesienia", które zostanie rozwiązane w czasie kompilacji, w rodzaju dowiązania symbolicznego. Miałby taki sam efekt jak:
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
}
Bez preprocesora (lub czy jest akceptowany?). Przypuszczam, że nie jest to naprawdę potrzebne lub można by tego uniknąć w tym konkretnym przypadku, czyniąc te argumenty wartości 6 funkcją bezpośrednio (chociaż byłoby to trochę irytujące, gdyby trzeba było wywołać taką funkcję - ale nawet wtedy mógłbym zrobić wbudowana funkcja proxy).
Ale zastanawiałem się, czy jest to w ogóle możliwe w ogóle? Nie mogłem znaleźć czegoś takiego. Myślę, że przydałoby się to skracając opisowe nazwy, które będą używane bardzo często, bez konieczności utraty oryginalnych nazw.
Masz na myśli odniesienie? 'float & l (frustum.l)' etc? – John3136
@ John3136 tak, ale rzeczywiste odniesienie nie jest potrzebne –
Tak czy inaczej, na to patrzysz, jest to całkowicie mikrooptymalizacja, niezależnie od tego, czy wykonasz kopię, czy użyjesz referencji. Kompilator jest wystarczająco inteligentny, aby zoptymalizować odniesienia do tych zmiennych. Rób to, co jest najlepsze dla czytelności. –