1. ホーム
  2. c++

[解決済み] C++の内部型定義 - 良いスタイルか悪いスタイルか?

2022-04-14 21:17:52

質問

最近よくやることは、特定のクラスに関連する型定義をそのクラスの中で宣言することです。

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 で、ベクターに格納されます。
  • これにより、実装を変更することができます。例えば、Loremが押し付けがましく参照カウントされるように変更する必要がある場合、( boost::intrusive_ptr 後日、コードに与える影響は最小限です。
  • 見た目も「きれい」だし、間違いなく読みやすいと思うんです。

気に入らない理由

  • 依存関係に問題がある場合があります。 Lorem::vector を別のクラスで使用したいが、Lorem を宣言する必要がある (あるいはしたい) だけである (そのヘッダファイルへの依存を導入するのではない) 場合、結局は明示的な型 (たとえば boost::shared_ptr<Lorem> よりも Lorem::ptr )であり、少し矛盾しています。
  • あまり一般的ではないため、理解しにくいのでは?

私は自分のコーディングスタイルを客観的に見るようにしているので、他の人の意見を聞いて、自分の考えを少し分解してみるのもいいかもしれませんね。

どのように解決するのか?

素晴らしいスタイルだと思いますし、私自身もそうしています。名前の範囲をできるだけ限定するのが常にベストであり、C++ではクラスの使用が最適な方法です。例えば、C++標準ライブラリでは、クラス内のtypedefが多用されています。