首页 > 解决方案 > 模板化函数中的模板不被解析为模板,而是作为比较

问题描述

我在Scalartype 上模板化了这个微不足道的函数,而 type 又使用了 Eigen 模板。

#include<Eigen/Core>

template<typename Scalar>
void somefunc(){
    Eigen::Matrix<Scalar,9,1> v;
    v.segment<3>(3).setZero();
}

编译时g++ -I/usr/include/eigen3 ex.cc,我得到

a.cc: In function ‘void somefunc()’:
a.cc:6:18: error: request for member ‘setZero’ in ‘3’, which is of non-class type ‘int’
  v.segment<3>(3).setZero();
                  ^~~~~~~

意味着代码被解析为v.segment [smaller-than] 3 [greater-than] (3).setZero()而不是模板参数。我尝试typename在前面添加,Eigen::Matrix但它没有改变任何东西。

怎么了?我必须忽略一些明显的东西。

标签: c++parsingtemplates

解决方案


推荐阅读