0

我试图将任意 Eigen-Vector/Array 类型的内容转换为 std::array。我从 Eigen 文档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 (下半场至结束)

4

1 回答 1

3

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

于 2013-06-30T18:51:08.547 回答