如何修复 eigen3 中的“非类型模板参数不是常量表达式”?

Léo*_*nel 6 c++ c++11 eigen3

我还是 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_ 将由一个可能具有不同值的变量启动)。

Max*_*hof 5

你不能。模板参数必须是编译时常量。

const int SIZE_ = 2;是一个编译时常量,这里不可能SIZE_有一个不同于 2 的值。编译器知道这一点并且可以安全地构建类型Eigen::Matrix<float, 2, 2>

const int SIZE_ = someNonConstantExpression;不是编译时常量。它不能用于模板参数。

您不能欺骗编译器接受需要编译时值的运行时值,例如在模板中。但是,Eigen 具有您可以使用的动态矩阵(在编译时不需要知道大小)。