.inlファイルで宣言を行うことの利点は何ですか?いつ使用する必要がありますか?
.inlファイルで宣言を行うことの利点は何ですか?いつ使用する必要がありますか?
回答:
.inlファイルは必須ではなく、コンパイラにとって特別な意味はありません。コードを構造化する方法の1つであり、それを読む可能性のある人間にヒントを提供します。
次の.inl2つの場合にファイルを使用します。
両方の場合において、私は私、他のファイルが含まれているヘッダファイル内の関数の宣言を入れたヘッダファイルの下部にあるファイル。#include.inl
インターフェイスが実装から分離されており、ヘッダーファイルが少し読みやすくなっているので、気に入っています。実装の詳細に関心がある場合は、.inlファイルを開いて読み取ることができます。そうしない場合は、する必要はありません。
.tccテンプレート実装ファイルに使用します。
glmは、前述の方法とまったく同じ方法で.hppと.inlを使用します。知っておくと良いです。すばらしい答えをありがとう:)
Nick Meyerは正解です。コンパイラは、含めるファイルの拡張子を気にしません。そのため、「。h」、「。hpp」、「。hxx」、「。hh」、「。inl」、 「.inc」などは、ファイルに含まれるはずの内容を明確にするための単純な規則です。
最良の例は、拡張子のないSTLヘッダーファイルです。
通常、「。inl」ファイルにはインラインコードが含まれます(したがって「.inl」拡張子が付きます)。
これらのファイル「.inl」ファイルは、ヘッダーコード間に依存サイクルがある場合に必要です。
例えば:
// A.hpp
struct A
{
void doSomethingElse()
{
// Etc.
}
void doSomething(B & b)
{
b.doSomethingElse() ;
}
} ;
そして:
// B.hpp
struct B
{
void doSomethingElse()
{
// Etc.
}
void doSomething(A & a)
{
a.doSomethingElse() ;
}
} ;
前方宣言の使用を含め、コンパイルする方法はありません。
解決策は、定義と実装を2種類のヘッダーファイルに分解することです。
hpp ヘッダー宣言/定義用inl ヘッダー実装用これは次の例に分類されます。
// A.hpp
struct B ;
struct A
{
void doSomethingElse() ;
void doSomething(B & b) ;
} ;
そして:
// A.inl
#include <A.hpp>
#include <B.hpp>
inline void A::doSomethingElse()
{
// Etc.
}
inline void A::doSomething(B & b)
{
b.doSomethingElse() ;
}
そして:
// B.hpp
struct A ;
struct B
{
void doSomethingElse() ;
void doSomething(A & a) ;
} ;
そして:
// B.INL
#include <B.hpp>
#include <A.hpp>
inline void B::doSomethingElse()
{
// Etc.
}
inline void B::doSomething(A & a)
{
a.doSomethingElse() ;
}
このようにして、必要な「.inl」ファイルを独自のソースに含めることができ、機能します。
繰り返しになりますが、インクルードされるファイルのサフィックス名は実際には重要ではなく、その用途だけが重要です。
If the function were not inline, you would you standard .cpp file for the implementation part?。テンプレートは、通常.CPPファイルで非表示にできないコードの例であるため、その場合、.INLファイルは必須です。
他の誰もそれを言及していないので:
.inlファイルを使用してインライン関数を格納すると、コンパイルの高速化に役立ちます。
宣言が必要な場所に宣言(.h)のみを含め、必要な場所にインライン実装(.inl)のみを含める場合(つまり、おそらく.cppと他の.inlファイルのみで、.hは含まない)、ヘッダーの依存関係に対する有益な効果。
これは、多くの相互作用するクラスを持つ大規模なプロジェクトで大きな勝利になる可能性があります。
私の経験では、.inlファイルはインライン関数の定義に使用されています。それらが.inlファイルにある場合、ファイルをヘッダーに含めてインライン関数を取得したり、.cファイルに含めて通常の関数定義を取得したりできます。
このようにして、同じソースは、インライン関数をサポートしていないコンパイラーと同様に、インライン関数をサポートしていないコンパイラーでより簡単に機能します。
すべてのC ++コンパイラがインライン関数をサポートしているため、通常はC ++コードではなく、通常のストレートCコードで使用されます。
#define inline staticで、ヘッダーにインライン関数を定義します。