C++类模板递归问题
自己编写了个小类模板:
- C/C++ code
#ifndef _DARRAY_#define _DARRAY_template <typename T>class DArray{private: int array_size; T* elems;public: DArray (int size = 10); //contructor DArray (const DArray& da); //copy contructor ~DArray(){delete[] elems;} //destructor int size() const{return array_size;} const T& operator [](int i) const; //prepare for const object T& operator [](int i); //get & set certain element DArray& operator =(const DArray& da); //assignment operator};template <typename T>DArray<T>::DArray(int size = 10): array_size(size){ elems = new T[size];}template <typename T>DArray<T>::DArray(const DArray& da){ array_size = da.array_size; elems = new T[array_size]; for(int i = 0; i< array_size; i++) elems[i] = da.elems[i];}template <typename T>const T& DArray<T>::operator [](int i) const{ return elems[i];}template <typename T>T& DArray<T>::operator [](int i){ return elems[i];}template <typename T>DArray<T>& DArray<T>::operator =(const DArray& da){ if(this == &da) return *this; delete[] elems; array_size = da.array_size; elems = new T[array_size]; for(int i = 0; i< array_size; i++) elems[i] = da.elems[i]; return *this;}#endif想用它构造一个二维数组。问题是怎样确定第二维数组长度?
- C/C++ code
#include <iostream>#include "DArray.h"using namespace std;int main(){ DArray<DArray<int> > dd(5); //这里如何声明才能构造5*5二维数组? for(int i = 0; i< dd.size(); i++) // line 10 dd[i] = DArray<int> (5);}如果是按照line 10那样写,会调用operator[] 和operator=,不太好.
《C++ Primer Plus》没有提,网上又查不到,只能自己发帖了
[解决办法]
用非类型模板参数template <typename T,int size>
[解决办法]
http://topic.csdn.net/u/20120323/15/a9775d22-26f3-4f74-8546-a5b8977e42eb.html
15楼
[解决办法]
楼主的实现明显不高端,这种多维数组或者矩阵的实现建议看看 blitz++这种模版算法库
template<typename T,int D> //D表示维数 比如实现5*5时 D就是2
class DArray;
template<typename T>
class DArray<T,1>
{
public:
DArray(int Num);
}
template<typename T>
class DArray<T,2>
{
public:
DArray(int Num1,int Num2);
}
实现5*5的就可以直接用
DArray<int,2> array(5,5)