gpt4 book ai didi

c++ - 使用 C++ 模板类的简单矩阵示例

转载 作者:搜寻专家 更新时间:2023-10-31 00:48:24 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的 Matrix 类,使用 C++ 模板来复习我的 C++,并向其他编码员解释一些事情。

这是我目前所拥有的:

template class<T>
class Matrix
{
public:
Matrix(const unsigned int rows, const unsigned int cols);
Matrix(const Matrix& m);
Matrix& operator=(const Matrix& m);
~Matrix();

unsigned int getNumRows() const;
unsigned int getNumCols() const;

template <class T> T getCellValue(unsigned int row, unsigned col) const;
template <class T> void setCellValue(unsigned int row, unsigned col, T value) const;

private:
// Note: intentionally NOT using smart pointers here ...
T * m_values;
};


template<class T> inline T Matrix::getCellValue(unsigned int row, unsigned col) const
{
}

template<class T> inline void Matrix::setCellValue(unsigned int row, unsigned col, T value)
{
}

我被困在 ctor 上,因为我需要分配一个新的[] T,它似乎需要一个模板方法——但是,我不确定我之前是否遇到过模板化的 ctor。

我怎样才能实现 ctor?

最佳答案

您可以在构造函数中访问T,因此构造函数本身不必是模板。例如:

Matrix::Matrix(const unsigned int rows, const unsigned int cols)
{
m_values = new T[rows * columns];
}

考虑为数组使用智能指针,例如 boost::scoped_arraystd::vector 以简化资源管理。

如果您的矩阵具有固定大小,另一种选择是将行和列与 T 一起作为模板参数:

template <class T, unsigned Rows, unsigned Columns>
class Matrix
{
T m_values[Rows * Columns];
};

最大的优势是大小是矩阵类型的一部分,这对于在编译时强制执行规则很有用,例如,确保两个矩阵在进行矩阵乘法时具有兼容的大小。它还不需要动态分配数组,这使得资源管理更容易一些。

最大的缺点是您无法更改矩阵的大小,因此它可能无法满足您的需求。

关于c++ - 使用 C++ 模板类的简单矩阵示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2679274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com