4

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

今私は次のようなものを持っています:

fstring.h

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

およびfstring_operators.h

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

このようなことをしても大丈夫ですか?また、fstring_operators.hのヘッダーガードも省略しました。これは、fstring.h以外の場所に含めることはできないためです。

4

2 に答える 2

7

これは本番コードで以前に見たことがありますが、次の2つの理由から、このスタイルに実際には同意しません。

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

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

于 2012-04-10T12:21:46.203 に答える
5

メソッドをフリー関数として定義する必要があると思います。次に、通常のヘッダーファイルの下部に#includeを追加できます。これは、多くのC ++ライブラリで使用されている方法です(一部のライブラリでは、演算子のファイル名が.iまたは.inlなどで終わる場合があります)。

あなたがそのようにそれをするならば、それは大丈夫のようです。OPでの記述方法は少し奇妙であり、たとえそれが機能したとしても、コードのメンテナ、場合によっては開発ツールさえも捨ててしまう可能性があります。

于 2012-04-10T12:22:25.720 に答える