Flexível-o tamanho da arma vetor de alocação de - verdade em geral, ou se é uma propriedade de Rcpp?

StackOverflow https://stackoverflow.com//questions/23044537

  •  21-12-2019
  •  | 
  •  

Pergunta

Eu estou usando Rcpp pacote para escrever um código que tem como principal proporção escrito em C++ e em menor proporção em R.

Com base no que eu sei do C++, ao contrário de todos os R, todas as variáveis em C++ deve ser declarado antecipadamente e esta declaração inclui tanto o tipo e o tamanho.Por exemplo, quando dizemos:

arma::vec test(2);

então eu suponho que o teste é um tatu vetor com tamanho de 2, o que significa que não deve atribuir algo de um tamanho diferente para testar.É isso mesmo?

Aqui é o meu desafio:

No meu código, eu tenho um loop que atribui vetores de tamanho diferente (geralmente maior do que 2) para o "teste do vetor" sem redeclaration de teste .Para minha surpresa, o código funciona perfeitamente, sem nenhum erro de compilação !

Em cada iteração, aqui está como eu atribuir um novo vetor para teste:

test = Rcpp::as<arma::vec>(myList["aVecFromMyList"]);

Pergunta:

É que um Tatu recurso que podemos atribuir vetores de diferentes comprimentos de teste que é inicialmente declarada de tamanho 2?ou é um Rcpp recurso pacote?

Muito obrigado por sua ajuda.

Foi útil?

Solução

Você está pedindo para o tamanho do vetor a ser codificado para o tipo.Quando você especificar que algo é do tipo arma::vec, você permitir que aceitar arma::vecs de qualquer tamanho.

Se você deseja impor uma restrição de tamanho do tipo, então você quer algo como arma::vec::fixed<N>, onde, no seu caso N seria 2.Este é um tipo que impõe a restrição de que os vetores devem ser do tamanho N.Há também typedefs para baixo dígitos versões destes, e.g. vec2 como um fixo vetor de tamanho 2.

Você teria que modificar sua as chamada da mesma forma que eu acredito -- espero que ele funciona, eu ainda não testei.

Você deve ler o Tatu docs;o Tatu docs são, provavelmente, as mais limpas e mais útil lá fora.

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