根据函数中传递给它的内容命名一个数组

时间:2016-11-07 19:19:42

标签: c++ arrays multidimensional-array

我将如何根据传递给它的内容命名数组。到目前为止,我有:

void FileIO::createMatrix(int rows, int cols)
{
    name = new double*[rows];
    for (int i = 0; i < rows; i++)
    {
        name[i] = new double[cols];
    }
}

如何用实际名称替换name?所以我可以通过轻松调用这个方法来创建许多数组?

那么,我可以创建一个名为name的数组,而不是创建一个名为foo的数组吗?

1 个答案:

答案 0 :(得分:0)

首先,请尽量不要直接使用动态数组,直到你做的事情如此低级......标准库充满了可爱的容器。尽量善用它们。

如果我的猜测是对的,你可以这样:

class FileIO{
.....
    double** MatrixA;
    double** MatrixB;
    double** MatrixC;
}
void FileIO::createMatrix(int rows, int cols){
    name = new double*[rows];
    for (int i = 0; i < rows; i++){
        name[i] = new double[cols];
    }
}

您可以通过名为成员变量类型的指针来解决您的问题:

class FileIO{
public:
    double** MatrixA;
    double** MatrixB;
    double** MatrixC;
    void createMatrix(int rows, int cols, double** FileIO::* member_varaible){
        this->*member_varaible= new double*[rows];
        for (int i = 0; i < rows; i++){
            (this->*member_varaible)[i] = new double[cols];
        }
    }
};
int main(){
    FileIO fio;
    fio.createMatrix(5,5,&FileIO::MatrixA);
    fio.createMatrix(2,4,&FileIO::MatrixB);
    fio.createMatrix(4,3,&FileIO::MatrixC);
}

如果是这种情况,我认为你的设计很糟糕,你可能需要考虑改变它。

替代性和更现实的解决方案:

namespace my_utility{
    template <typename T>
    T** create_2d_dynamic_array(int rows, int cols){
        T** temp = new T*[rows];
        for (size_t i = 0; i < rows; i++){
            temp[i] = new T[cols];
        }
        return result;
    }
}

int main(){
   auto foo = my_utility::create_2d_dynamic_array<double>(5,5);
}