有人可以解释为什么此MWE无法编译:
template<typename Scalar>
class ScalarTemplate {
public:
static Eigen::Matrix<Scalar, 2, 1> tail(){
Eigen::Matrix<Scalar, 3, 1> m;
return m.tail<2>();
}
};
int main() {
auto tail = ScalarTemplate<float>::tail();
}
非常简单,所有相关的Eigen模板都应使用
float
初始化,并且所有容器的大小都应在编译时知道。但这会产生以下结果:../src/main.cpp: In static member function 'static Eigen::Matrix<_Scalar, 2, 1> ScalarTemplate<Scalar>::tail()':
../src/main.cpp:24:26: error: expected primary-expression before ')' token
return m.tail<2>();
^
../src/main.cpp: In instantiation of 'static Eigen::Matrix<_Scalar, 2, 1> ScalarTemplate<Scalar>::tail() [with Scalar = float]':
../src/main.cpp:29:40: required from here
../src/main.cpp:24:22: error: invalid operands of types '<unresolved overloaded function type>' and 'int' to binary 'operator<'
return m.tail<2>();
据我所知,所有子矩阵操作都会发生相同的情况。本征是版本3.3.7。
最佳答案
该错误消息有点令人困惑,因此我花了一些时间弄清以下事实:子矩阵操作本身就是模板类内部的模板调用,因此正确的调用是:
m.template tail<2>();
关于c++ - 标量类型上的 Eigen 模板无法编译固定大小的子矩阵操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59600059/