为什么保守调整大小不适用于函数中的 Ref 变量?

Why doesn't conservativeResize work with Ref variable in a function?

本文关键字:函数 Ref 变量 适用于 不适用 调整 为什么      更新时间:2023-10-16

我正在制作一个函数,可以扩展给定的矩阵,即MatrixXd类型。我试图使用 conservativeResize 来实现这一点,但是当我在函数语句中使用 Ref 时,conservativeResize 不适用于 Ref 对象,但调整大小可以。我想知道为什么会出现这个问题。提前谢谢。

我尝试直接在函数语句中使用 MatrixXd &var,它确实有效,但我不知道为什么 Ref 不这样做。

void mat_extend(Ref<MatrixXd> mat)
{
    int len = mat.rows();
    mat.conservativeResize(len+2,NoChange);
}
```

在您的情况下mat.resize(len+2,NoChange) ,也不起作用。这应该断言,除非您禁用断言,在这种情况下,它将不执行任何操作。

Ref不允许调整大小,因为它不"拥有"它指向的内存 - 例如,它可以指向另一个矩阵的block,或者指向一些外部分配的内存的Map

允许调用resize的原因是,在某些泛型代码中(包括 Eigen 本身内部(,首先调整矩阵的大小,然后分配值。用一些isResizeable逻辑在任何地方保护它将是一团糟。