私が最近頻繁に行っているのは、そのクラス内の特定のクラスに関連するtypedefを宣言することです。
class Lorem
{
typedef boost::shared_ptr<Lorem> ptr;
typedef std::vector<Lorem::ptr> vector;
//
// ...
//
};
これらのタイプは、コードの他の場所で使用されます。
Lorem::vector lorems;
Lorem::ptr lorem( new Lorem() );
lorems.push_back( lorem );
私が好きな理由:
- クラステンプレートによって導入されたノイズを減らし、に
std::vector<Lorem>
なりますLorem::vector
。 - これは意図の表明として機能します。上記の例では、Loremクラスは参照カウント
boost::shared_ptr
され、ベクトルに格納されることを目的としています。 - これにより、実装の変更が可能になります。つまり
boost::intrusive_ptr
、後の段階でLoremを(を介して)侵入参照参照に変更する必要がある場合、コードへの影響は最小限になります。 - 私はそれは「きれい」に見え、間違いなく読みやすいと思います。
気に入らない理由:
- 依存関係に問題がある場合があります-たとえば、
Lorem::vector
別のクラス内にを埋め込みたいが、(ヘッダーファイルに依存関係を導入するのではなく)Loremを転送宣言するだけでよい(またはしたい)場合は、最終的に明示的な型(たとえば、boost::shared_ptr<Lorem>
ではなくLorem::ptr
)。これは少し矛盾します。 - それはあまり一般的ではないかもしれません、それゆえ理解するのは難しいですか?
私は自分のコーディングスタイルで客観的になるように努めていますので、私の考えを少し分析できるように、それについて他の意見を得ることは良いでしょう。