我有一个包含以下构造函数的类
//matrix constructor
mat::mat(int nrows,int ncols){
this->nrows=nrows;
this->ncols=ncols;
this->dat=new float *[nrows];
for(int i=0;i<nrows;i++){
this->dat[i]=new float[ncols];
for(int j=0;j<ncols;j++){
this->dat[i][j]=-9999;
}
}
}
如您所见,构造函数用于包含浮点数的矩阵。我想有时使用相同的构造函数来创建一个整数矩阵。如何通过对上述代码的最小更改来完成此操作?我不想为矩阵创建一个包含整数的新类。
由于
答案 0 :(得分:2)
你可以写一个模板化的mat类:
template<typename T>
class mat {
//matrix constructor
mat(int nrows,int ncols) {
this->nrows=nrows;
this->ncols=ncols;
this->dat=new T *[nrows];
// ^
for(int i=0;i<nrows;i++){
this->dat[i]=new T[ncols];
// ^
for(int j=0;j<ncols;j++){
this->dat[i][j]=-9999;
}
}
};
将float
的每次出现替换为T
,并将所有代码内联到mat.h
头文件中。
更新:
上面的代码如何看待std :: vector?
template<typename T>
class mat {
//matrix constructor
mat(int nrows_,int ncols_)
: nrows(nrows_) , ncols(ncols_) {
dat.resize(nrows);
for(int i=0;i<nrows;i++) {
dat[i].resize(ncols);
for(int j=0;j<ncols;j++) {
dat[i][j]=-9999;
}
}
}
private:
int nrows;
int ncols;
std::vector<std::vector<T>> dat;
};