質問
名前空間の配列を作成するにはどうすればよいですか?そして、長いショットのように見えるので、これが不可能な場合、配列に作成できる名前空間に似たものがありますか?
名前空間に役立つ場合、これらの変数が含まれます:
const int maxx=// depends on the particular namespace
// I need an array to go through each namespace and
// pick out the variable
const int maxy=// depends on particular namespace
//prgm is a class I made
prgm sector[maxx][maxy];
// another array of prgms. int is my shorthand of saying "depends on
// particular namespace", so is char.
prgm programs[int]={prgm1(int,int,char),prgm2(int,int,char)...
だから、どんな助けでも歓迎です。
解決
あなたが話している言語はわかりませんが、多くの(ほとんどの?)言語では、コンパイル時に定数への参照が定数値に置き換えられます。そのため、実行時には存在しなくなり、リフレクションも役に立たなくなります。
定数を(静的)プロパティとして公開するクラスを各名前空間に作成できます。次に、リフレクションを使用して各名前空間のクラスを検索し、プロパティから定数値を取得できます。
しかし、他の人が言ったように、あなたは本当にあなたのデザインを再考すべきです。最後に、名前空間は含まれるクラス(およびその他のもの)のクラス名を拡張するだけなので、通常、リフレクションを介してアクセスできません。または、リフレクションを介して名前空間をエンティティとして公開する(非難解な)言語はありますか?
.NETの場合、 System.Typeの参照。名前空間プロパティは次のことを述べています。
名前空間は論理的な設計時の命名の便利さであり、主にアプリケーションでスコープを定義し、単一の階層構造でクラスやその他のタイプを整理するために使用されます。 ランタイムの観点からは、名前空間はありません。
他のヒント
リフレクションを使用できますが、デザインを再検討する必要があると思います。
これはC ++のはずですか?名前空間ではなくクラスを定義し、そのクラスのインスタンス(オブジェクト)を作成し、配列にそれらを配置する必要があるように聞こえます。
sector
変数は、 maxx
および maxy
パラメーターに渡される値に基づいてサイズ設定されるため、注意が必要です。クラスのコンストラクタ。 コンテナクラスを使用することで、この問題に対処できます。 a>または動的に割り当てられた多次元配列<代わりに/ a>。
C ++について話すと、そこでは名前空間をエンティティとして渡すことはできません。ただし、テンプレートへの型引数として、型を使用してこれを行うことができます。この場合、 MPLシーケンス MPLアルゴリズム:
struct c1 { typedef int_<2> value_x; };
struct c2 { typedef int_<3> value_x; };
struct c3 { typedef int_<1> value_x; };
template<typename C> struct get_x : C::value_x { };
typedef vector<c1, c2, c3> scope_vec;
typedef max_element<
transform_view< scope_vec , get_x<_1> >
>::type iter;
次のように配列を作成できます
prgm programs[deref< iter >::type::value];
その型ベクトル内の検索はコンパイル時に行われることに注意してください。そのため、配列の値はコンパイル時に決定されます。