Почему conservativeResize не работает с переменной Ref в функции? - PullRequest
1 голос
/ 11 июля 2019

Я делаю функцию, которая может расширять данную матрицу типа MatrixXd.Я пытался использовать conservativeResize для достижения этой цели, но когда я использую Ref в операторе функции, conservativeResize не работает с объектом Ref, но изменяет размер делать.Мне интересно, почему эта проблема происходит.Заранее спасибо.

Я пытался использовать MatrixXd & var непосредственно в операторе функции, и это работает, но я не знаю, почему Ref не работает.

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

1 Ответ

0 голосов
/ 11 июля 2019

В вашем случае mat.resize(len+2,NoChange) тоже не сработает. Это должно утверждать, если вы не отключили утверждения, в этом случае это ничего не будет делать.

Ref не позволяет изменять размер, поскольку он не «владеет» памятью, на которую он указывает - например, он может указывать на block другой матрицы или на Map некоторой внешней памяти, выделенной .

Причина, по которой разрешен вызов resize, заключается в том, что в некотором универсальном коде (в том числе внутри самого Eigen) сначала изменяются размеры матриц, а затем присваиваются значения. Защищать это какой-то isResizeable логикой везде было бы беспорядком.

...