In der Eigendokumentation unter dem Titel why its interesting gibt es ein Beispiel, das erwähnt, wie Eigen arbeitet. Das Beispiel istWie verhindert Eigen die Generierung temporärer Objekte?
#include<Eigen/Core>
int main()
{
int size = 50;
// VectorXf is a vector of floats, with dynamic size.
Eigen::VectorXf u(size), v(size), w(size);
u = v + w;
}
In der Doc sagt, in der Regel aufgrund der Design-Architektur der C++ die obigen Operation würde unter Verwendung eines temporären erfolgen.
Wie wir sehen können, würden wir aufgrund des temporären Objekts eine weitere Schleife benötigen. Aber eigen verhindert, dass diese zusätzliche Schleife erzeugt wird, indem dieses temporäre Objekt nicht erzeugt wird. Für diese Operation genügt also nur eine Schleife.
for(int i = 0; i < size; i++) u[i] = v[i] + w[i];
Obwohl sie erklärt, wie diese Matrix-Summe funktioniert, aber ich konnte es nicht verstehen. Es wäre schön, wenn jemand es in einfachen Worten erklären könnte.
Es verwendet eine Technik namens * Ausdruck Vorlagen *; Das Ergebnis von 'v + w' ist eigentlich kein Vektor, sondern das Äquivalent der Anweisung" sie wollen v + w machen ". Nur dann, wenn das Ergebnis tatsächlich einem Vektor zugeordnet ist, tritt die Berechnung auf, und so kann die Berechnung mit vollständiger Kenntnis des gesamten Ausdrucks fortgeführt werden und dadurch Provisorien vermieden werden. Wenn Sie 'auto && x = v + w;' schreiben, können Sie dies beobachten. –
Aus einem kurzen Blick auf die Dokumentation sieht es so aus, als ob Eigen eine Technik namens "Expression Templates" verwendet. Machen Sie einfach eine Google-Suche für diesen Begriff, es gibt viele Seiten, die schöne Erklärungen geben. –