Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将C+;中的非常量整数传递给模板参数+;_C++_Templates_Matrix - Fatal编程技术网

C++ 将C+;中的非常量整数传递给模板参数+;

C++ 将C+;中的非常量整数传递给模板参数+;,c++,templates,matrix,C++,Templates,Matrix,我想知道如何创建一个矩阵,其大小由命令行给出。如果它是一个非模板矩阵类,那么它可以很容易地完成。但是如果matrix类是一个模板类(如在Eigen中),我如何创建一个大小由命令行给定的矩阵呢 模板 类矩阵{ ... }; int main{ //动态分配行和列 int行; int col; 标准::cin>>行>>列; //一些程序 矩阵m; 返回0; } 编辑: 谢谢你,海德和马尔金。我认为Eigen的实现背后有一些神奇的机制。通过再次查看Eigen的代码,我认为他们只对小矩阵使用模板参数i

我想知道如何创建一个矩阵,其大小由命令行给出。如果它是一个非模板矩阵类,那么它可以很容易地完成。但是如果matrix类是一个模板类(如在Eigen中),我如何创建一个大小由命令行给定的矩阵呢

模板
类矩阵{
...
};
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动态分配通常是用指针完成的,所以是的。