5

まず、私の英語で申し訳ありません。

わかりました、特定のプロセスを実行するプログラムに取り組んでいます。このプロセスでは、いくつかのクラスと関数を定義する必要があります。それらにアクセスするには、それらすべてをブロックに編成する必要があります。

私の最初のアイデアは、名前空間 (C++) を使用して、次のようなものを取得することでした。

namespace LoadSystem
{
   namespace ParseBlock1
   {
      class ClassA {...}
      class ClassB {...}
      class ClassC {...}
   }
   namespace ParseBlock2
   {
      class ClassA {...}
      class ClassB {...}
      class ClassC {...}
   }
}

それで、これが良いかどうかを判断するために読んでいました。入れ子になった名前空間をたくさん使用してはならないことを既に読んだので、私の目的では、上記のように最小レベルは 2 です。

ParseBlocks私の目標は、LoadSystem名前空間にどんどん追加できるようにすることです。単一のファイルに保存される.hため、クラスのインターフェースのみが存在します。ブロックごとに多くのクラスが存在する可能性があるため、各ブロックの定義を他の.hファイルに分割して、メイン.hファイルをできるだけ小さく保ちたいと考えています。

block1.hそれで、私はファイルとを定義するというアイデアで終わりましたblock2.h。それぞれは次のような構造です:

namespace LoadSystem
{
   namespace ParseBlock1
   {
      class ClassA {...}
      class ClassB {...}
      class ClassC {...}
   }
}

namespace LoadSystem
{
   namespace ParseBlock2
   {
      class ClassA {...}
      class ClassB {...}
      class ClassC {...}
   }
}

そしてそれらをload_system.hファイルにインポートします。したがって、別のブロックを追加する必要があるたびに、必要なファイルを作成し、最後に新しいblockX.hものを main にインポートするだけload_system.hです。

LoadSystem::ParseBlock1::Class1次に、 orを使用して、同じ名前空間から両方のブロックにアクセスできる必要がありますLoadSystem::ParseBlock2::Class1

これを単純な整数値でテストしたところ、機能しました。名前空間が結合され、警告なしで値にアクセスできます (私は を使用しgcc -Wall -Werror -Wextra -pedanticました)。

では、この名前空間の組み合わせが正しいかどうか。たぶんうまくいくかもしれませんが、私はそれを使うべきではないかもしれません。

また、「マスター」ヘッダー ファイル (他のヘッダー ファイルをインポートする) をインポートするこのプロセスも正しいかどうかを知りたいです (複数のインポートから保護するために必要なマクロを#ifndef使用#defineしています)。#endif次のようなものを使用します。

# ifndef LOAD_SYSTEM_H_
# define LOAD_SYSTEM_H_

# include "block1/block1.h"
# include "block2/block2.h"

# endif

それで、これが正しいかどうかを知るのを手伝ってください。

4

1 に答える 1

2

いつでも既存の名前空間を拡張できるので、その部分は問題ありません。

そして、その部分だけが簡単な技術的答えを持っています。

「マスターヘッダーファイル」に関しては、個人的な好みの問題である、より主観的なものです。含まれているヘッダーは、前提条件なしで(それらの前に他のものを含めるなど)単独で含めることができることを望んでいます。もしそうなら、私にとってはすべて大丈夫ですが、そうでない場合、コードのユーザーは実際には小さなヘッダーを取得するために大きなマスターヘッダーファイルをインクルードする必要があり、それはビルド時間に悪影響を与える可能性があります(そうではありませんが、それ自体に前提条件が含まれているため、ヘッダーを更新すると機能しなくなる可能性のある脆弱なコードがあります)。

于 2012-12-28T06:41:46.753 に答える