2012-04-10 16 views
3

私はいくつかの関数と多くの演算子で構成されるクラスを持っています。ほとんどすべての関数と演算子はテンプレートを使用しているため、ヘッダファイルに実装しています。 これはコード内で何かを見つけるのがかなり難しくなったので、私はすべての演算子を別々のヘッダファイルに移動することに決めました。複数のヘッダーファイルでクラスを分割しても問題ありませんか?

fstring.h

class fstring{ 
    ... 
    #include "fstring_operators.h" 
} 

... 
template<int RSIZE> 
bool operator==(const fstring<RSIZE>& rhs) const { 
    return equals(rhs._chars, RSIZE); 
} 
... 

が、それはOK、このような何かを行うことですfstring_operators.h:

今私はのようなものがありますか?また、fstring_operators.hのヘッダーガードも省略しました.fstring.hを除いてはどこにも含めてはならないからです。

+0

間違いなく可能ですが、適切な文書がないとクラスを理解するのが難しくなる可能性があります。たとえば、クラス宣言をスキャンして、特別なメソッドや演算子があるかどうかを調べるのは簡単ではありません。 –

+0

"ベストプラクティス"かどうかは分かりませんが、大丈夫だと思いますし、コードをきれいに保つのに役立つかもしれません。一般的なルールとして、特定のケースを見ないで、必要以上に必要な場合は、クラスのデザインを改善することができます。 – ShinTakezou

+1

1つのオプションは、クラス定義内でメンバー関数を宣言してから、後で(同じヘッダーまたは別のヘッダーに)定義することです。そうすれば、別のファイルにジャンプせずに、また特別な場所にしか含めることのできないファイルを導入することなく、定義を見つけることが容易になります。 –

答えて

7

前にこのコードを見てきましたが、2つの理由:

1)ヘッダーにclassが完全に定義されていることが必要です。あなたが探しているものを見つけるために他のヘッダーを見る必要はありません。

2)他のヘッダーを他の場所に含めることができます。ガードを含まなくても、それは動作しないという保証ではありません。

4

あなたは自由な関数としてメソッドを定義するべきだと思います。次に、通常のヘッダファイルの一番下に#includeを置くことができます。これは、多くのC++ライブラリで使用されている習慣です(そのうちのいくつかは、演算子のファイル名が.iや.inlなどで終わることになります)。

そうすれば、うまくいくようです。あなたがOPに書いたやり方は少しばかり見知らぬ人です。たとえそれがうまくいても、あなたのコードのメンテナー、そしておそらくいくつかの開発ツールを投げ捨てるかもしれません。

関連する問題