如何编写将.col()方法的输出作为输入的方法?

时间:2014-05-04 04:43:08

标签: c++ eigen

我已经阅读了Writing Functions Taking Eigen Types as Parameters上的文档,因为我的所有Eigen容器都是Arrays,所以我决定创建一个这样的函数原型:

template <typename Derived>
void Threshold(Eigen::DenseBase<Derived>& params) 
// I tried void Threshold(Eigen::ArrayBase<Derived>& params) as well, same outcome
{
  params = (params >= 0.0f).template cast<float>();
}

问题是,当我这样调用这个函数时:

Eigen::Array<float, Eigen::Dynamic, Eigen::Dynamic> arr;
// fill it with stuff
Threshold(arr.col(0)); // error!

我收到以下错误:

no known conversion for argument 1 from ‘Eigen::DenseBase<Eigen::Array<float, -1, -1>
>::ColXpr {aka Eigen::Block<Eigen::Array<float, -1, -1>, -1, 1, true>}’ to
‘Eigen::DenseBase<Eigen::Block<Eigen::Array<float, -1, -1>, -1, 1, true> >&’

我的功能模板错了吗?如何将.col()对象的Eigen::Array方法的输出传递给函数?

1 个答案:

答案 0 :(得分:1)

您可能正在寻找Ref<>类,它允许您编写一个接受矩阵列的函数和不带模板的副本或副本:

void threshold(Ref<ArrayXf> params) {
    params = (params >= 0 ).cast<float>();
}
ArrayXf  a;
ArrayXXf A;
/* ... */
threshold(a);
threshold(A.col(j));