Pergunta

Como posso criar uma matriz de namespaces? E porque ele parece ser um tiro longo, se tal for impossível, há algo semelhante a um espaço de nomes que podem ser feitas em uma matriz?

O namespace, se isso ajuda, contém essas variáveis:

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

Assim, qualquer ajuda seria bem-vinda.

Foi útil?

Solução

Não estou certo de que língua você está falando, mas em muitos (a maioria?) Línguas, as referências a constantes são substituídas pelo valor constante em tempo de compilação. Portanto, já não presente em tempo de execução e até reflexão são não vai ajudar.

Você pode criar uma classe em cada namespace que expõe as constantes como propriedades (estáticos). Então você pode usar a reflexão para procurar a classe em cada namespace e obter os valores constantes das propriedades.

Mas, como mencionado por outros, você realmente deve repensar o seu design. Finalmente, namespaces geralmente não são acessíveis através da reflexão, porque eles simplesmente estender os nomes de classe das classes contidos (e outras coisas). Ou há uma língua (não-esotérica) que expõe namespaces como entidades através de reflexão?

Para .NET a referência para o System.Type. propriedade namespace afirma o seguinte.

Um namespace é uma lógica de tempo de design de nomeação conveniência , usado principalmente para definir o escopo em um aplicativo e organizar classes e outros tipos em uma única estrutura hierárquica. Do ponto de vista do tempo de execução, não há namespaces.

Outras dicas

Você pode usar reflexão, mas eu acho que você deve repensar o seu design.

Isto é suposto ser C ++? Parece que você precisa para definir uma classe, não um espaço de nomes, em seguida, criar instâncias (objetos) de que a classe e colocar -los em uma matriz.

Assim, a variável sector fica complicado, uma vez que é feito sob medida com base no valor dos parâmetros maxx e maxy que seria passado para o construtor da classe. Você pode cuidar desse problema usando um href="http://www.parashift.com/c++-faq-lite/containers.html#faq-34.1" rel="nofollow noreferrer"> classe contêiner ou alocada dinamicamente array multi-dimensional em seu lugar.

Se você falar sobre C ++, lá você não pode passar namespaces como entidades ao redor. Mas você pode fazê-lo com os tipos, como o tipo de argumento para modelos. Neste caso, uma MPL sequência poderia ajudar, juntamente com MPL algoritmos :

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;

Você pode então criar sua matriz como

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

Note que a busca dentro desse tipo vector acontece em tempo de compilação. Assim, o valor da matriz é determinado no tempo de compilação ou.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top