まず、私の英語で申し訳ありません。
わかりました、特定のプロセスを実行するプログラムに取り組んでいます。このプロセスでは、いくつかのクラスと関数を定義する必要があります。それらにアクセスするには、それらすべてをブロックに編成する必要があります。
私の最初のアイデアは、名前空間 (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
それで、これが正しいかどうかを知るのを手伝ってください。