1

私は、すべてのクラスを個別の .h ファイルと .cpp ファイルとして実装した C++ プロジェクトに取り組んでいます。これは手間をかける価値がなかったことがわかりました。- 2 つのファイル間を行ったり来たりする編集を行っています - 思いがけない頭痛の種がたくさんありました (事前宣言を追加し、テンプレート化されたクラスを明示的にエクスポートする必要がありました) - 直接的なメリットは見られません。コード ベースは比較的小さいままです(たとえば、10,000 行未満のコード)、コンパイル時間は実質的ではありません。

私の質問は2つあります

a) 実装とプロトタイプを分離しておくことで見逃した可能性のある利点はありますか?

b) そうでない場合、cpp ファイルをヘッダー ファイルにマージする機能を備えた無料のツールまたは IDE はありますか?

4

1 に答える 1

9

これをしないでください。他の場所で使用するためにクラスを公開するほとんどの単純なクラスでは、常に*クラスの宣言を.hヘッダー ファイルに、定義 (コード) をファイルに含める必要があり.cppます。

次に.h、クラスを使用する場所にファイルを含めます (つまり、インスタンス化します)。.cppただし、リンカは、それぞれが個別にコンパイルされた後にコードを「リンク」する責任があります。

あなたへの私の質問は、「他にどのようにしますか?」です。多くの n00bs が犯す間違いの 1 つは、#include "foo.c. そうすると、独立したコンパイルが失われるだけでなく、同じクラスの定義が複数あるため、リンク時に問題が発生します。#includeファイルを作成すると、そのファイルの本文に文字通りドロップすることを忘れないでください。

[*] もちろん、この規則には例外があります。

これに対する 1 つの例外は、テンプレート クラスです。これらは、全体がヘッダー ファイルに含まれている必要があります。その理由は、クラスが型パラメーターでインスタンス化されるまで、実際のコードが生成されないためです。次に、コンパイラは基本的に、必要に応じて指定された型でクラスの本体を「埋めます」。それまでは型がわからないため、単独でコンパイルして後でリンクアップすることはできません。

于 2012-06-27T19:45:38.640 に答える