ホームページ > バックエンド開発 > C++ > テンプレート化された C クラスを個別のヘッダー ファイルと実装ファイルに分割できますか?

テンプレート化された C クラスを個別のヘッダー ファイルと実装ファイルに分割できますか?

Linda Hamilton
リリース: 2024-12-13 18:55:10
オリジナル
438 人が閲覧しました

Can Templated C   Classes Be Split into Separate Header and Implementation Files?

テンプレート化された 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート