2016-05-11 3 views
0

В настоящее время я работаю с Eigen в C++, и есть несколько вещей об инициализации, на которые я не мог найти ответы.Eigen initialize from Matrix

Можно ли инициализировать динамическую матрицу, используя другую динамическую матрицу того же размера:

MyClass::MyClass(Eigen::Matrix<T, Eigen::Dynamic, Eigen Dynamic> sourceMatrix) 
{ 
    Eigen::Matrix<T, Eigen::Dynamic, Eigen Dynamic> destMatrix(sourceMatrix) 
} 

выше, кажется, компилировать, но мой проект в настоящее время заполнен с другими ошибками компиляции, так что я не могу проверить его и я хотел бы быть уверен, что он будет делать, прежде чем использовать его. Это сделает destMatrix глубокой копией sourceMatrix? Или мелкой копии?

Является ли это по-другому, чем делать:

MyClass::MyClass(Eigen::Matrix<T, Eigen::Dynamic, Eigen Dynamic> sourceMatrix) 
{ 
    Eigen::Matrix<T, Eigen::Dynamic, Eigen Dynamic> destMatrix(sourceMatrix.data()) 
} 

ответ

3

Он будет делать глубокую копию, также sourceMatrix, вероятно, следует быть объявлен как константной ссылке. Если вы хотите неполную копию, то вы должны просить для него явно с помощью, например, в Ref объект:

Ref<MatrixXd> dest(source); 

Смотрите документацию Eigen::Ref для получения более подробной информации и примеров.

+0

Thank you ggael! –

Смежные вопросы