私は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. C#構造体変数の値を保持できません
- 5. グローバル構造体を定義するグローバル構造体
- 6. MATLAB mex関数を持つユーザー定義の構造体
- 7. 構造体ポインタを保持するSTLリスト
- 8. FILE *をCの構造体に保存
- 9. オブジェクト型変数を別のクラスに渡しますが、構造体は保持しますか?
- 10. C++定数構造体の初期化
- 11. は動的に私が動的にメンバーとして別の構造体を持つ構造体を割り当てています構造体
- 12. 別の関数の構造体の値を変更する
- 13. C構造体から別の関数にリストを渡す
- 14. 構造体内に `initializer_list` ctorを持つ構造体はありますか?
- 15. C構造体内の構造体内部の構造体
- 16. Pythonの構造体内にmatlab構造体をインポートする
- 17. 別の構造の構造体の配列にアクセスするには?
- 18. 構造体への引数としての構造体
- 19. 関数と構造体を持つポインタを使用する
- 20. 構造体に変数を定義するMaxScript
- 21. 構造体内の構造体
- 22. 構造体の配列 - 構造体?
- 23. 構造体内の特定の構造体の配列を作る。
- 24. 構造体のinit関数
- 25. 構造体を関数に渡すと、構造体がネストされます。
- 26. Matlab内の別の構造体内の構造体のサイズ(R2010a 64ビットLinux)
- 27. 構造体ポインタを設定する
- 28. レンジキーで値を保持する構造
- 29. 構造体のベクトルを持つ構造体のベクトルのベクトルを構築できますか? (はい、実際に)
- 30. 構造体を関数に渡す
これは、のためのヘッダーファイルです。ヘッダーファイル内の構造体を宣言し、このヘッダーを他のファイルにインクルードします。 –