如何创建命名空间数组?

时间:2009-04-30 02:26:07

标签: arrays namespaces

如何创建命名空间数组?而且因为它似乎是一个很长的镜头,如果这是不可能的,是否有类似于命名空间可以制作成数组的东西?

命名空间(如果有帮助)包含以下变量:

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)...

所以欢迎任何帮助。

4 个答案:

答案 0 :(得分:2)

你可以使用反射,但我认为你应该重新考虑你的设计。

答案 1 :(得分:0)

我不确定你在说什么语言,但是在很多(大多数?)语言中,常量的引用在编译时被常量值替换。所以它们在运行时不再存在,甚至反射也无济于事。

您可以在每个命名空间中创建一个类,将常量公开为(静态)属性。然后,您可以使用反射来搜索每个命名空间中的类,并从属性中获取常量值。

但是,正如其他人所说,你应该重新考虑你的设计。最后,名称空间通常不能通过反射访问,因为它们只是扩展所包含的类(和其他东西)的类名。或者是否有一种(非深奥的)语言通过反射将名称空间暴露为实体?

对于.NET,System.Type.Namespace property的引用说明如下。

  

命名空间是一种逻辑设计时命名方便,主要用于定义应用程序中的范围,并在单个层次结构中组织类和其他类型。 从运行时的角度来看,没有名称空间。

答案 2 :(得分:0)

这应该是C ++吗?听起来你需要定义一个类,而不是命名空间,然后创建该类的实例(对象)并将它们放在一个数组中。

因此sector变量变得棘手,因为它的大小基于将传递给类构造函数的maxxmaxy参数的值。您可以使用container classdynamically-allocated multi-dimensional array代替处理该问题。

答案 3 :(得分:0)

如果您谈论C ++,那么您无法将名称空间作为实体传递。但您可以使用类型作为模板的类型参数。在这种情况下,MPL sequence可以与MPL algorithms一起提供帮助:

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];

请注意,该类型向量内的搜索发生在编译时。因此,数组的值也是在编译时确定的。