Pregunta

¿Cómo puedo crear una matriz de espacios de nombres? Y debido a que parece una posibilidad remota, si esto es imposible, ¿hay algo similar a un espacio de nombres que pueda convertirse en una matriz?

El espacio de nombres, si ayuda, contiene estas variables:

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

Entonces cualquier ayuda sería bienvenida.

¿Fue útil?

Solución

No estoy seguro de qué idioma está hablando, pero en muchos (¿la mayoría?), las referencias a constantes se reemplazan por el valor constante en tiempo de compilación. Por lo tanto, ya no están presentes en tiempo de ejecución e incluso la reflexión no ayudará.

Puede crear una clase en cada espacio de nombres que exponga las constantes como propiedades (estáticas). Luego puede usar la reflexión para buscar la clase en cada espacio de nombres y obtener los valores constantes de las propiedades.

Pero, como lo mencionaron otros, realmente debería repensar su diseño. Finalmente, los espacios de nombres generalmente no son accesibles a través de la reflexión porque solo extienden los nombres de clase de las clases contenidas (y otras cosas). ¿O hay un lenguaje (no esotérico) que expone los espacios de nombres como entidades a través de la reflexión?

Para .NET, la referencia para el System.Type. La propiedad de espacio de nombres establece lo siguiente.

  

Un espacio de nombres es una conveniencia de denominación lógica en tiempo de diseño , utilizada principalmente para definir el alcance en una aplicación y organizar clases y otros tipos en una sola estructura jerárquica. Desde el punto de vista del tiempo de ejecución, no hay espacios de nombres.

Otros consejos

Podría usar la reflexión, pero creo que debería repensar su diseño.

¿Se supone que esto es C ++? Parece que necesita definir una clase, no un espacio de nombres, luego crear instancias (objetos) de esa clase y ponerlos en una matriz.

Entonces, la variable sector se vuelve complicada, ya que su tamaño se basa en el valor de los parámetros maxx y maxy que se pasarían a constructor de la clase. Puede solucionar ese problema utilizando una clase de contenedor o a matriz multidimensional asignada dinámicamente en su lugar.

Si habla de C ++, allí no puede pasar espacios de nombres como entidades. Pero puede hacerlo con los tipos, como argumento de tipo para plantillas. En este caso, una secuencia MPL podría ayudar junto con algoritmos 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;

Entonces puede crear su matriz como

prgm programs[deref< iter >::type::value];

Tenga en cuenta que la búsqueda dentro de ese vector de tipo ocurre en tiempo de compilación. Por lo tanto, el valor de la matriz se determina en tiempo de compilación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top