C++ 将C+;中的非常量整数传递给模板参数+;
我想知道如何创建一个矩阵,其大小由命令行给出。如果它是一个非模板矩阵类,那么它可以很容易地完成。但是如果matrix类是一个模板类(如在Eigen中),我如何创建一个大小由命令行给定的矩阵呢C++ 将C+;中的非常量整数传递给模板参数+;,c++,templates,matrix,C++,Templates,Matrix,我想知道如何创建一个矩阵,其大小由命令行给出。如果它是一个非模板矩阵类,那么它可以很容易地完成。但是如果matrix类是一个模板类(如在Eigen中),我如何创建一个大小由命令行给定的矩阵呢 模板 类矩阵{ ... }; int main{ //动态分配行和列 int行; int col; 标准::cin>>行>>列; //一些程序 矩阵m; 返回0; } 编辑: 谢谢你,海德和马尔金。我认为Eigen的实现背后有一些神奇的机制。通过再次查看Eigen的代码,我认为他们只对小矩阵使用模板参数i
模板
类矩阵{
...
};
int main{
//动态分配行和列
int行;
int col;
标准::cin>>行>>列;
//一些程序
矩阵m;
返回0;
}
编辑:
谢谢你,海德和马尔金。我认为Eigen的实现背后有一些神奇的机制。通过再次查看Eigen的代码,我认为他们只对小矩阵使用模板参数
int\u Cols,int\u Rows
,并将动态
定义为一些常数,如-1,并在运行时处理它。答案是你不能,模板在编译时实例化,所以行和列也必须在编译时知道
您必须实现一个非模板化的矩阵类来实现您想要的。将行/列传递给构造函数,并允许类为矩阵动态分配内存
[编辑]
如果您想以类似于Eigen的方式实现矩阵,那么您也需要研究它们的实现。在这里:
您可以看到,它们的模板化矩阵接受行和列作为模板参数,当参数是某个指定值<代码>动态代码>(这可能是一些非常大的值,如std::numeric\u limits::max()
),则矩阵使用构造函数参数中提供的矩阵大小
如果动态模板矩阵的代码应该明显不同,那么您可以为其提供专门化。模板在编译时扩展为代码。所以只需将它们作为普通构造函数参数传递,并在运行时处理它们。但在本征矩阵中是“模板类矩阵”。它们如何做到这一点?但在本征矩阵中是“模板类矩阵”。他们如何做到这一点?阅读文档:。模板参数中规定了
\u行数或动态
,因此对于动态矩阵,您应该提供动态
关键字。然后,行/列可能在构造函数中提供。我还没有使用过Eigen,所以这是我在这里所能帮助的。@TalhaIrfan动态分配通常是用指针完成的,所以是的。