Я пытаюсь создать 2d класс массива на основе boost::multi_array
.Я сталкиваюсь с двумя проблемами в коде, приведенном ниже.(1) Код для функции-члена col()
не компилируется, говоря, что ::type’ has not been declared
.Куда я иду не так?(2) Можно ли определить функцию-член data()
вне класса?Моя попытка дает ошибку компиляции, так как typedefs не доступны.Но я не могу определить typedefs вне класса, потому что typedefs в свою очередь требует тип T
, который доступен только внутри класса шаблонаСпасибо.
#include <boost/multi_array.hpp>
#include <algorithm>
template <class T>
class Array2d{
public:
typedef typename boost::multi_array<T,2> array_type;
typedef typename array_type::element element;
typedef boost::multi_array_types::index_range range;
//is it possible to define this function outside the class?
Array2d(uint rows, uint cols);
element * data(){return array.data();}
//this function does not compile
template<class Itr>
void col(int x, Itr itr){
//copies column x to the given container - the line below DOES NOT COMPILE
array_type::array_view<1>::type myview = array[boost::indices[range()][x]];
std::copy(myview.begin(),myview.end(),itr);
}
private:
array_type array;
uint rows;
uint cols;
};
template <class T>
Array2d<T>::Array2d(uint _rows, uint _cols):rows(_rows),cols(_cols){
array.resize(boost::extents[rows][cols]);
}