Pergunta

Eu quero atribuir uma cópia de um boost :: multi_array. Como posso fazer isso. O objeto onde eu quero atribuí-lo a foi inicializado com os construtores padrão.

Este código não funciona, porque as dimensões e tamanho não são os mesmos

class Field {
  boost::multi_array<char, 2> m_f;

  void set_f(boost::multi_array<short, 2> &f) {
    m_f = f;
  }
}

O que usar em vez de m_f = f?

Foi útil?

Solução

Você deve redimensionar m_f antes de atribuir. Ele poderia olhar como no exemplo a seguir:

void set_f(boost::multi_array<short, 2> &f) {
    std::vector<size_t> ex;
    const size_t* shape = f.shape();
    ex.assign( shape, shape+f.num_dimensions() );
    m_f.resize( ex );
    m_f = f;
}

Pode ser que há uma maneira melhor. short conversão para char será implícita. Você deve considerar o uso std::transform se você quiser conversão explícita.

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