2011-01-15 7 views
2

グローバルにではなく、標準的なものをローカルに#includeすることができます(ある関数、一つのクラス、など)。非常に単純な例を取ると、std :: stringを使用したいかもしれませんが、それはあるクラスでのみ必要であり、どこにも存在するオーバーヘッドを必要としません。ローカル#includes

答えて

5

#includeをローカルにするのではなく、必要なクラスを別のファイルに移動するだけです。

+0

#includeのinclude(文字列を使用するクラスと#include )の後ろにあるメインプログラムの部分は、この場合std :: stringにアクセスできますか? – alan2here

+2

@ alan2here:クラスヘッダー(.h)に '#include 'を置くと、クラスをインクルードしたときにメインプログラムもアクセスできます。クラスの実装(.cpp)に '#include 'がある場合、それはそのファイルにしか見えません。 – casablanca

+0

ありがとう、それは質問に答える。 – alan2here

2

#includeは、単に(preprocessorによって)コンパイル前のテキスト置換の一種に過ぎないため、include文を置く場所にすぎません。

多分、あなたは「一つだけ.cppファイルに」を「ローカル」として参照のうえと「グローバル」「すべての.cppファイル」などをへています。

これが当てはまる場合は、#includeを、その.cppファイルに必要な場所にのみ入れることで、 "ローカル"として作成できます。複数のファイルに1つの#includeステートメントを含むファイルを含める場合は、includeステートメントを.hファイルに置き、必要なすべてのファイルの中に.hファイルを含めます。

#includeは、precompiled headerとして機能する.hヘッダーファイルです。

0

std::stringの定義をローカルヘッダ(プロジェクトディレクトリにある)に入れることができます。

std::stringのようなテンプレートクラスの場合、これは簡単な仕事ではありません。それはテンプレートなので、宣言全体が必要になり、実行時にプログラムでヘッダーに宣言されたとおりにstd::stringが使用されます。

std::stringは異なる方法で実装することができますが、インターフェイスと同じにする必要があります。

したがって、短い答えは:いいえ、システムヘッダーを使用します。

0

.cppファイルに何か#includeすると、他のファイルのこのヘッダにアクセスすることはできません。しかし、bhファイルで#hincludeしてからc.cppでbhを#includeすると、c.cppでahにアクセスできると思います。

1

希望することを実行する方法の1つは、class IMPLあなたのクラスのメンバーとしてそれへのポインタを使用します。それを定義して別ファイルのyour_class::IMPLに実装します。そうすれば、あなたは完全なデータ隠蔽を実現できます。

+0

通常は 'pimlイディオム'と呼ばれています。http://c2.com/cgi/wiki?PimplIdiom –

+0

@Pete Kirkham:20年以上使っていて、名前がついていなかったことは分かりませんでした。時々見ているが、何があったのかわからない。私が知っていることを知って、知っている! –

関連する問題