Flexível-o tamanho da arma vetor de alocação de - verdade em geral, ou se é uma propriedade de Rcpp?
-
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.
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::vec
s 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.