テンプレート化された C クラスを個別の .hpp および .cpp ファイルに分割することは可能ですか?
個別のヘッダー全体でテンプレート化された C クラスをコンパイルしようとする場合(.hpp) および実装 (.cpp) ファイルを使用すると、リンク エラーが発生する可能性があります。次のコードを考えてみましょう:
// stack.hpp template <typename Type> class stack { // ... };
// stack.cpp template <typename Type> stack<Type>::stack() { // ... }
// main.cpp #include "stack.hpp" stack<int> s;
テンプレート クラス メソッドの「未定義の参照」エラーでコンパイルが失敗します。すべてのメソッド実装をヘッダー ファイルに移動することは可能ですが、理想的な解決策ではありません。
テンプレート クラスの個別コンパイルが失敗する理由
この問題は、テンプレートがクラスはコンパイル時に完全には定義されていません。コンパイラは、提供されたテンプレート パラメータに基づいて特定のインスタンス化のコードを生成します。テンプレート パラメーターがないと、コンパイラーは実装ファイル内のメソッドのメモリ レイアウトとコードを生成できません。
代替: データ構造とアルゴリズムの分離
実装の詳細を非表示にするには分離を維持しながら、アルゴリズムからデータ構造を分割することを検討してください。テンプレート クラスは主にデータ構造を定義する必要がありますが、テンプレート化されていないアルゴリズム クラスはデータ構造を操作または使用します。このアプローチにより、テンプレート クラス用の個別の実装ファイルを必要とせずに、貴重な実装の詳細が効果的に隠蔽されます。
以上がテンプレート化された C クラスを個別のヘッダー ファイルと実装ファイルに分割できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。