[解決済み] 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が多用されています。
関連
-
[解決済み】識別子 "string "は未定義?
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] ループ内での変数宣言、グッドプラクティスかバッドプラクティスか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】Enterキーを押して続行する
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較