如何创建命名空间数组?而且因为它似乎是一个很长的镜头,如果这是不可能的,是否有类似于命名空间可以制作成数组的东西?
命名空间(如果有帮助)包含以下变量:
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)...
所以欢迎任何帮助。
答案 0 :(得分:2)
你可以使用反射,但我认为你应该重新考虑你的设计。
答案 1 :(得分:0)
我不确定你在说什么语言,但是在很多(大多数?)语言中,常量的引用在编译时被常量值替换。所以它们在运行时不再存在,甚至反射也无济于事。
您可以在每个命名空间中创建一个类,将常量公开为(静态)属性。然后,您可以使用反射来搜索每个命名空间中的类,并从属性中获取常量值。
但是,正如其他人所说,你应该重新考虑你的设计。最后,名称空间通常不能通过反射访问,因为它们只是扩展所包含的类(和其他东西)的类名。或者是否有一种(非深奥的)语言通过反射将名称空间暴露为实体?
对于.NET,System.Type.Namespace property的引用说明如下。
命名空间是一种逻辑设计时命名方便,主要用于定义应用程序中的范围,并在单个层次结构中组织类和其他类型。 从运行时的角度来看,没有名称空间。
答案 2 :(得分:0)
这应该是C ++吗?听起来你需要定义一个类,而不是命名空间,然后创建该类的实例(对象)并将它们放在一个数组中。
因此sector
变量变得棘手,因为它的大小基于将传递给类构造函数的maxx
和maxy
参数的值。您可以使用container class或dynamically-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];
请注意,该类型向量内的搜索发生在编译时。因此,数组的值也是在编译时确定的。