特征库:获取模板化函数参数的副本

时间:2013-06-30 15:25:55

标签: c++ templates eigen

我试图将任意Eigen-Vector / Array类型的内容转换为std :: array。我从Eigen doc http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html中读到了这部分,所以这是我的功能:

template<typename DERIVED>
std::array<typename Eigen::DenseBase<DERIVED>::Scalar, Eigen::DenseBase<DERIVED>::RowsAtCompileTime>
toStl (const Eigen::DenseBase<DERIVED>& input)
{
... // Do conversion
}

现在的问题是,当我从输入参数类型中删除&符号以获取副本时,我得到一个空的输入变量。它包含系数0的一些虚假值,其余为零。

当我通过引用获取参数时,一切正常。谁能告诉我为什么?

PS:对于那些可能想知道我为什么要复制的人;为了帮助优化器,在本次演讲中是否提出建议:http://www.youtube.com/watch?v=eR34r7HOU14(后半部分结束)

1 个答案:

答案 0 :(得分:3)

DenseBase&lt;&gt; class是一个空基类,因此创建该类型的对象没有意义。因此,如果您真的想按值传递输入,那么它的类型必须是DERIVED而不是DenseBase。然而,通过值传递它仍然听起来很奇怪,而你的函数的唯一目的是制作另一个副本。