私は3つの整数i、j、kを保持するVECTOR構造体を持っています。私は複数のヘッダファイルでこの構造体を利用する必要があります。すべての#defines、structs、すべての定数を "Constants.h"というラベルの付いた別個のヘッダファイルに移動するのは悪い習慣と考えられますか?または私が現在使用している各ヘッダファイルに同じ構造体を定義する必要がありますか?構造体/定数を別々のヘッダに保持する
答えて
彼らが異なるコンパイル単位で使用できるように、ヘッダ・ファイルに定義を移動するために非常に良い練習です。これにより、すべてのコンパイルユニットが常にクラスと定数の同じ定義を使用するようになります(例については、より詳細な説明についてはhereを参照してください)。
しかし、悪い習慣~はすべて1つのヘッダーファイルに入れます。これにより、このヘッダファイルを使用するすべてのコンパイル単位が、完全に無関係の変更であっても再コンパイルされます。無関係なものは別のヘッダーになければなりません。便宜上、すべてを含むヘッダーを1つ提供することが有用な場合もありますが、このような機能は、プロトタイプ作成にのみ使用してください。また、コンパイル時が非常に長くなる可能性があります。 This answerには、ヘッダーを整理する方法のアイデアが記載されています。あなたがC++の定数のためのマクロを回避しようとする必要があること
注 - static const T
を好む、例えば:
static const int foo = 42;
マクロがタイプセーフされていないし、道のために微妙なバグを導入することができますが展開されています。 This questionは、マクロが実際に有用な場合をいくつか挙げています。
単語、私ができるときには病気 – user680725
これはまったく悪いことではありません。コードを再利用することは、一般的には良い習慣です。
- 1. ある構造体を別の構造体にコピーする
- 2. 特定の構造体メンバを別の構造体にコピーする
- 3. 構造体の配列を別の構造体にネストする
- 4. 構造体を別の構造体メンバにキャストする方法
- 5. 別の構造体にフレキシブルな配列メンバーを持つ構造体
- 6. 構造体を別の構造体に渡す方法
- 7. C#構造体変数の値を保持できません
- 8. 構造体変数と構造体メンバ
- 9. C++構造体のポインタを持つ構造体を初期化するには、
- 10. 名前のある構造体を別の構造体に匿名構造体として埋め込む
- 11. マクロで構造体フィールドの可視性を保持する
- 12. ポインタ構造体を持つSWIG関数
- 13. C構造体へのポインタを持つ構造体 - 値にアクセスする
- 14. グローバル構造体を定義するグローバル構造体
- 15. 構造体へのポインタを持つ構造体:ベスト・アプローチ
- 16. フィールドは別の構造体
- 17. 私は、単純な構造体持っている構造体
- 18. MATLAB mex関数を持つユーザー定義の構造体
- 19. 構造体ポインタを保持するSTLリスト
- 20. FILE *をCの構造体に保存
- 21. 他の構造体内で構造体の値を設定するには
- 22. 構造体の個々の値にアクセスするには?
- 23. 構造体を持つ構造体の配列にアクセスします。
- 24. オブジェクト型変数を別のクラスに渡しますが、構造体は保持しますか?
- 25. は動的に私が動的にメンバーとして別の構造体を持つ構造体を割り当てています構造体
- 26. 別の構造体から新しい構造体または既存の構造体にコピー
- 27. 構造体定義のポインタを持つ列挙体
- 28. C++定数構造体の初期化
- 29. 別の関数の構造体の値を変更する
- 30. リンクリスト:私は次の構造から構築ノードと、リンクリストを持っている別の構造体の中に
これは、のためのヘッダーファイルです。ヘッダーファイル内の構造体を宣言し、このヘッダーを他のファイルにインクルードします。 –