Eigen :: Ref in-by-pointer

时间:2016-02-24 20:51:29

标签: c++ pointers eigen

与问题Pointer vs Reference difference when passing Eigen objects as arguments类似

假设我们有foo1和矩阵mat2by2:

Matrix33d mat2by2;
mat2by2 << 1,2,
           3,4;

void foo2(Ref<MatrixXd> container){
    //...container matrix is modified here
}

阅读http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html之后,似乎foo1的更好替代方案可能是:

void foo(Eigen::MatrixXd* container){
    //...container matrix is modified here
}

如果将foo2的参数作为参考传递, 什么是使用Eigen :: Ref类??

传递指针的等价物
Option

1 个答案:

答案 0 :(得分:1)

我认为基本的想法是直接使用指针或引用。 Eigen使用模板表达式来表示计算。这意味着类型会根据用于计算矩阵的表达式而更改,并且表达式可能会在未评估的情况下进行。

如果需要,Ref会将模板表达式计算为一个临时对象,该临时对象与您请求作为参数传递的内存布局相匹配。如果参数的内存布局与参数所需的内存布局相匹配,则Ref将充当透明引用。

直接从文档中借用:您的输入参数应声明为常量,而非const参数可用作输出参数。

void cov(const Ref<const MatrixXf> x, Ref<MatrixXf> C)
{
   ...
   C = ...; // Your return value here
}

如果你读取和写入矩阵,参数显然也应该是非常量的。

对于可选参数,您可以使用指向Ref。

的指针

编辑:文档确实注意到您可以直接使用常量引用来传递参数。这只能起作用,因为编译器很乐意将临时对象转换为const引用。它不适用于指针。