2009-08-06 28 views
8

Tôi muốn gán một bản sao của tăng :: multi_array. Tôi có thể làm cái này như thế nào. Đối tượng mà tôi muốn gán nó vào đã được khởi tạo với các hàm tạo mặc định.Cách gán/sao chép Boost :: multi_array

Mã này không hoạt động, vì kích thước và kích thước không giống nhau

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

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

gì để sử dụng thay vì m_f = f?

Trả lời

5

Bạn nên đổi kích thước m_f trước khi chỉ định. Nó có thể giống như trong mẫu sau:

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; 
} 

Có thể có cách tốt hơn. Chuyển đổi short thành char sẽ bị ẩn. Bạn nên cân nhắc sử dụng std::transform nếu bạn muốn chuyển đổi rõ ràng.

+5

thực sự? tăng không cung cấp bất kỳ cách nào để làm điều này trong một dòng? hai nhất? – rodrigob

+2

Tôi cũng không thể tin được. Quá nhiều sự bất tiện ... – ulidtko

Các vấn đề liên quan