我想根據boost::multi_array
創建一個2d數組類。我在下面給出的代碼中面臨兩個問題。 (1)成員函數col()
的代碼不會編譯爲::type’ has not been declared
。我哪裏錯了? (2)是否可以在課堂外定義成員函數data()
?由於typedefs不可用,因此我嘗試給出編譯錯誤。但是我無法在類之外定義類型定義,因爲類型定義反過來需要類型T
,該類型僅在模板類中可用。謝謝。來自boost :: multi_array的2d數組 - 無法編譯
#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]);
}
我已經想出了編譯器錯誤信息和K-ballo輸入的幫助。但爲什麼'模板'的要求? – suresh
@suresh:查看我的編輯 –
@suresh:有關更多詳細信息,請參閱此FAQ:[模板,'.template'和':: template'語法是什麼?](http:// www。 comeaucomputing.com/techtalk/templates/#templateprefix) – ildjarn