首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++类模板递归有关问题

2012-03-31 
C++类模板递归问题自己编写了个小类模板:C/C++ code#ifndef _DARRAY_#define _DARRAY_template typename

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)

热点排行
Bad Request.