Was sind die Vorteile von Deklarationen in einer INL-Datei? Wann müsste ich das gleiche verwenden?
Was sind die Vorteile von Deklarationen in einer INL-Datei? Wann müsste ich das gleiche verwenden?
Antworten:
.inlDateien sind niemals obligatorisch und haben für den Compiler keine besondere Bedeutung. Es ist nur eine Möglichkeit, Ihren Code zu strukturieren, die den Menschen, die ihn lesen könnten, einen Hinweis gibt.
Ich benutze .inlDateien in zwei Fällen:
In beiden Fällen füge ich die Deklarationen der Funktionen in eine Header-Datei ein, die in anderen Dateien enthalten ist, und dann #includedie .inlDatei am Ende der Header-Datei.
Ich mag es, weil es die Schnittstelle von der Implementierung trennt und die Header-Datei ein wenig leichter lesbar macht. Wenn Sie sich für die Implementierungsdetails interessieren, können Sie die .inlDatei öffnen und lesen. Wenn Sie dies nicht tun, müssen Sie es nicht tun.
.tccfür Vorlagenimplementierungsdateien verwendet.
glmverwendet .hpp und .inl genauso wie oben erwähnt. Gut zu wissen, danke für die tolle Antwort :)
Nick Meyer hat recht: Der Compiler kümmert sich nicht um die Erweiterung der Datei, die Sie einschließen, also Dinge wie ".h", ".hpp", ".hxx", ".hh", ".inl", ".inc" usw. sind eine einfache Konvention, um zu verdeutlichen, was die Dateien enthalten sollen.
Das beste Beispiel sind die STL-Header-Dateien, die keinerlei Erweiterung haben.
Normalerweise enthalten ".inl" -Dateien Inline- Code (daher die Erweiterung ".inl").
Diese ".inl" -Dateien sind eine Notwendigkeit, wenn Sie einen Abhängigkeitszyklus zwischen dem Header- Code haben.
Beispielsweise:
// A.hpp
struct A
{
void doSomethingElse()
{
// Etc.
}
void doSomething(B & b)
{
b.doSomethingElse() ;
}
} ;
Und:
// B.hpp
struct B
{
void doSomethingElse()
{
// Etc.
}
void doSomething(A & a)
{
a.doSomethingElse() ;
}
} ;
Es gibt keine Möglichkeit, es kompilieren zu lassen, einschließlich der Verwendung der Vorwärtsdeklaration.
Die Lösung besteht dann darin, Definition und Implementierung in zwei Arten von Header-Dateien aufzuteilen:
hpp für die Headerdeklaration / -definitioninl für die Header-ImplementierungWas sich in folgendes Beispiel aufteilt:
// A.hpp
struct B ;
struct A
{
void doSomethingElse() ;
void doSomething(B & b) ;
} ;
Und:
// A.inl
#include <A.hpp>
#include <B.hpp>
inline void A::doSomethingElse()
{
// Etc.
}
inline void A::doSomething(B & b)
{
b.doSomethingElse() ;
}
Und:
// B.hpp
struct A ;
struct B
{
void doSomethingElse() ;
void doSomething(A & a) ;
} ;
Und:
// B.INL
#include <B.hpp>
#include <A.hpp>
inline void B::doSomethingElse()
{
// Etc.
}
inline void B::doSomething(A & a)
{
a.doSomethingElse() ;
}
Auf diese Weise können Sie jede benötigte ".inl" -Datei in Ihre eigene Quelle aufnehmen, und es funktioniert.
Auch hier sind die Suffixnamen der enthaltenen Dateien nicht wirklich wichtig, sondern nur ihre Verwendung.
If the function were not inline, you would you standard .cpp file for the implementation part?Möglicherweise. Vorlagen sind Beispiele für Code, der normalerweise nicht in CPP-Dateien ausgeblendet werden kann. In diesem Fall ist die INL-Datei obligatorisch.
Da hat es sonst niemand erwähnt:
Die Verwendung von INL-Dateien zum Speichern Ihrer Inline-Funktionen kann hilfreich sein, um das Kompilieren zu beschleunigen.
Wenn Sie nur die Deklarationen (.h) einschließen, in denen Sie Deklarationen benötigen, und nur Inline-Implementierungen (.inl) einschließen, in denen Sie sie benötigen (dh wahrscheinlich nur in .cpp- und anderen .inl-Dateien, nicht in .hs), kann a positive Auswirkung auf Ihre Header-Abhängigkeiten.
Dies kann bei größeren Projekten mit vielen interagierenden Klassen ein bedeutender Gewinn sein.
Nach meiner Erfahrung werden INL-Dateien verwendet, um Inline-Funktionen zu definieren. Wenn sie sich in einer INL-Datei befinden, kann die Datei in einem Header enthalten sein, um Inline-Funktionen abzurufen, und in einer C-Datei, um reguläre Funktionsdefinitionen abzurufen.
Auf diese Weise kann dieselbe Quelle einfacher mit Compilern arbeiten, die keine Inline-Funktionsunterstützung haben, als auch mit Compilern, die dies tun.
Sie werden normalerweise mit reinem C-Code verwendet, nicht oft mit C ++ - Code, da alle C ++ - Compiler Inline-Funktionen unterstützen.
#define inline staticIhre Inline-Funktionen in der Kopfzeile definieren.
Ich glaube, es ist nur eine Namenskonvention für eine "Header" -Datei, die Inline-Code enthält. Es ist so, dass .h-Dateien Definitionen enthalten können und .inl-Dateien Inline-Code enthalten, der für Vorlagen erforderlich ist.
Ich glaube nicht, dass es mehr als eine Namenskonvention gibt, um den Zweck der Datei klar zu machen