gpt4 book ai didi

c++ - Eigen::Ref 传递指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:14:32 29 4
gpt4 key购买 nike

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

假设我们有 foo1 和矩阵 mat2by2:

void foo1(MatrixXd& container){
//...container matrix is modified here
}

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

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

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

如果 foo2 的参数作为引用传递,什么相当于使用 Eigen::Ref 类的按指针传递??

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

最佳答案

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

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

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

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

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

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

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

关于c++ - Eigen::Ref 传递指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35612831/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com