标量类型的特征模板无法编译固定大小的子矩阵操作

问题描述 投票:0回答:1

有人可以解释为什么此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。

c++ templates eigen eigen3
1个回答
0
投票
m.template tail<2>();
© www.soinside.com 2019 - 2024. All rights reserved.