C++ Eigen перемещает arrayXXd в MatrixXd

Я хочу переместить (или поменять местами) массив типа Eigen::ArrayXXd на Eigen::MatrixXd. Чтобы добиться этого, я попытался,

#include <iostream>
#include <Eigen/Dense>
using namespace std;
int main(int , char** ) {
    Eigen::ArrayXXd array(100,100);
    auto mat2 = std::move(mat.matrix());
    cout << array.size() << endl;
    cout << mat.size() << endl;
}

Вывод показывает, что оба размера равны 10000, что означает, что массив был скопирован. Чтобы избежать копирования, я также пытался,

    Eigen::MatrixXd mat;
    mat.swap(array.matrix());   (runtime error assert failure)
//  swap(array.matrix(), mat);  (compile error)

Я тестировал версию Eigen 3.2.0 beta1 и использовал gcc 4.8.0. Из эксперимента кажется, что семантика перемещения для матриц и массивов еще не реализована. Это правильно?

Есть ли способ безопасного перемещения (без копирования)?


person Sungmin    schedule 07.05.2013    source источник


Ответы (1)


Вы не можете принудительно что-то переместить. Если у Eigen нет конструктора перемещения/оператора присваивания для операций, которые вы пытаетесь выполнить (и я не вижу доказательств того, что Eigen поддерживает перемещение в их документации), то вы не можете их переместить.

Движение — это не волшебство; он требует явной поддержки автором типа.

person Nicol Bolas    schedule 07.05.2013
comment
Спасибо, Эйген, похоже, сейчас не поддерживает. Тогда есть ли способ безопасно поменять их местами без копирования? На самом деле моя матрица настолько велика, что я страдаю от нехватки памяти. - person Sungmin; 07.05.2013
comment
@Sungmin: Посмотрите документацию. Если есть функция подкачки, она так и скажет. - person Nicol Bolas; 07.05.2013
comment
Насколько я понял из документа, есть функция преобразования из ArrayXXd в MatrixXd. Так же как и обмен между двумя разными MatrixXd. Итак, я догадался, что есть способ поменять местами ArrayXXd и MatrixXd. - person Sungmin; 07.05.2013
comment
Кстати, как я могу ответить? Иногда я вижу намек на ID, когда пишу @. Теперь никаких предложений не появляется. - person Sungmin; 07.05.2013
comment
@Sungmin, когда вы отвечаете автору сообщения, это неявно - person NoSenseEtAl; 07.05.2013