Statische Inline-Methoden?
Frage
Okay,
Hier ist, was ich versuche, ... Recht zu tun, jetzt ist es kompilieren aber versagt bei Verknüpfung ... LNK2001
Ich möchte die Methoden statisch, weil es keine Membervariablen sind jedoch wollen, dass sie ich inline auch für die speedups sie bieten.
Was ist der beste Weg, dies zu tun? Hier ist, was ich auf den Punkt gebracht haben:
/* foo.h */
class foo
{
static void bar(float* in);
};
/* foo.cpp */
inline void foo::bar(float* in)
{
// some dark magic here
}
Ich versuche, dies zu tun, weil ich gehen zu können, will:
foo::bar(myFloatPtr);
foo hat keine Membervariablen ... es macht keinen Sinn zu.
Lösung
Wenn Sie bar von einem anderen CPP-Datei aufrufen, andere als foo.cpp, muss es in einer Header-Datei sein.
Andere Tipps
Als erstes würde ich sie in einem namespace
setzen statt, denn es gibt überhaupt keine Logik in dieser "class"
. Zweitens können Sie die Funktionen Körper in der Header-Datei definiert werden direkt die Compiler, um sie sehen zu können. Andernfalls müssen Sie whole program optimization
vom Linker getan werden für inlining diese Funktionen (AFAIK).
Sie müssen Ihre Inline-Funktion in der Header-Datei, keine separate Implementierung-Datei definiert werden. Die Definitionen benötigt werden, wenn die Header-Datei #include wird, wenn sie gehofft werden inlined, schließlich werden.
Der Verbindungsfehler Sie sehen werden, ist, weil die Deklaration (in der Header-Datei) nicht den Compiler darüber informieren, dass die Methode inline sein soll, während die Umsetzung inline, also nicht verfügbar für die Verbindung.
Im Allgemeinen inline-fähigen Funktionen implementiert werden, wo sie (in der Header-Datei) deklariert werden. Der Compiler ist frei Funktionen inline, wie Sie sie haben, aber Sie können nicht Kraft es etwas Inline. Wenn Sie Visual C ++ verwenden, aktivieren Sie "Inline jede geeignete", "Link-Zeitcodegenerierung" und "favorisieren schnellen Code".