我想知道如何创建一个大小由命令行给出的矩阵。如果它是非模板矩阵类,则可以简单地完成。但是,如果矩阵类是模板类(如 Eigen 中的),我该如何创建一个其大小从命令行给出的矩阵?
template<int _row, int _col>
class Matrix{
...
};
int main{
// assign rows and cols dynamically
int row;
int col;
std::cin >> row >> col;
// Some procedures
Matrix<row, col> m;
return 0;
}
编辑:
谢谢@hyde 和@marcinj。我认为 Eigen 的实现背后有一些神奇的机制。通过再次查看 Eigen 的代码,我认为他们使用模板参数 int _Cols, int _Rows
仅适用于小矩阵并定义 Dynamic
是一些像 -1 这样的常量并在运行时处理它。
最佳答案
答案是你不能,模板在编译时实例化,因此 row 和 col 也必须在编译时知道。
您将必须实现一个非模板化的 Matrix 类才能实现您想要的。将行/列传递给构造函数并允许类动态为矩阵分配内存。
[编辑]
如果您想以与 Eigen 类似的方式实现 Matrix,您也需要研究它们的实现。在这里:
https://eigen.tuxfamily.org/dox/classEigen_1_1Matrix.html
你可以看到,当参数具有某个指定值时,他们的模板化矩阵接受 row 和 col 作为模板参数 Dynamic
(这可能是一些非常大的值,例如 std::numeric_limits<unsigned int>::max()
),然后 Matrix 使用构造函数参数中提供的矩阵大小。
如果动态模板矩阵的代码应该显着不同,那么您可以为其提供专门化。
关于c++ - 如何将非常量 int 作为模板参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37343291/