将非常量整数从 in C++传递给模板参数



我想知道如何创建一个大小从命令行给出的矩阵。如果它是一个非模板矩阵类,则可以简单地完成。但是,如果矩阵类是一个模板类(如在本征中),我该如何创建一个大小从命令行给出的矩阵呢?

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 传递给构造函数,并允许类为矩阵动态分配内存。

[编辑]

如果你想以与在本征中类似的方式实现你的矩阵,你也必须研究它们的实现。在这里:

https://eigen.tuxfamily.org/dox/classEigen_1_1Matrix.html

您可以看到他们的模板化矩阵接受行和列作为模板参数,当参数具有某个指定的值Dynamic(这可能是一些非常大的值,如 std::numeric_limits<unsigned int>::max() ),然后矩阵使用构造函数参数中提供的矩阵大小。

如果动态模板矩阵的代码应该明显不同,那么您可以为其提供专用化。

最新更新