25

テンプレートの仕組みについての本を読んでいますが、このテンプレートの説明を理解するのに苦労しています。

それは言う

コンパイラがテンプレートの定義を確認すると、コードは生成されません。テンプレートの特定のインスタンスをインスタンス化する場合にのみコードを生成します。テンプレートを使用する場合にのみコードが生成される (テンプレートを定義する場合ではない) という事実は、ソース コードの編成方法とエラーの検出時に影響します。インスタンス化を生成するには、コンパイラは、関数テンプレートまたはクラス テンプレート メンバー関数。その結果、テンプレート以外のコードとは異なり、テンプレートのヘッダーには通常、定義と宣言が含まれます。

「コードを生成する」とは正確にはどういう意味ですか? 関数テンプレートやクラス テンプレートをコンパイルすると、通常の関数やクラスと何が違うのかわかりません。

4

7 に答える 7

17

テンプレートは、コードを作成するためのパターンです。コンパイラは、テンプレートの定義を確認すると、そのパターンに関するメモを作成します。そのテンプレートの使用を確認すると、メモを掘り起こし、使用されている箇所にパターンを適用する方法を見つけ出し、パターンに従ってコードを生成します。

于 2013-11-05T20:50:12.177 に答える
3

ここでの主なポイントは、テンプレートの特定のインスタンスを満たすまで、コンパイラはテンプレート定義を処理しないということです。(その後、テンプレート クラスの特定のケースである通常のクラスのように、固定のテンプレート パラメーターを使用して続行できます。)

あなたの質問に対する直接的な答えは次のとおりです。コンパイラはユーザーの C++ コードからマシン コードを生成します。これは、ここで「コードを生成する」という言葉が意味するものだと思います。

コンパイラがテンプレートを使用するソースをコンパイルするとき、ヘッダー ファイル (#include マクロを含むソースに含まれる) しかないため、テンプレート宣言はヘッダー ファイルにある必要がありますが、テンプレート定義全体が必要です。したがって、論理的な結論は、テンプレート定義はヘッダーにある必要があるということです。

于 2013-11-05T20:39:12.787 に答える