我还是 Eigen 库和 C++ 的新手。我正在测试一些代码,但我不明白为什么会这样
#include <iostream>
#include <Eigen/Dense>
using namespace std;
int main()
{
int a = 2;
const int SIZE_ = a;
Eigen::Matrix<float, SIZE_, SIZE_> test;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不编译,而这
#include <iostream>
#include <Eigen/Dense>
using namespace std;
int main()
{
const int SIZE_ = 2;
Eigen::Matrix<float, SIZE_, SIZE_> test;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
工作得很好。我如何更改第一个代码以使其工作(即 SIZE_ 将由一个可能具有不同值的变量启动)。
你不能。模板参数必须是编译时常量。
const int SIZE_ = 2;是一个编译时常量,这里不可能SIZE_有一个不同于 2 的值。编译器知道这一点并且可以安全地构建类型Eigen::Matrix<float, 2, 2>。
const int SIZE_ = someNonConstantExpression;不是编译时常量。它不能用于模板参数。
您不能欺骗编译器接受需要编译时值的运行时值,例如在模板中。但是,Eigen 具有您可以使用的动态矩阵(在编译时不需要知道大小)。