переехать Поддержка для собственный был представлен в этом патче в 2011 году. Однако я не могу найти конструктор перемещения в заголовочном файле Matrix. Также на веб-странице Eigen все еще есть семантика перемещения, указанная как «сделать» вещь. Все это указывает на то, что патч еще не был представлен в релизной версии
Эта тестовая программа доказывает, что конструктор перемещения покидает перемещенный объект без изменений.
#include <iostream>
#include <utility>
#include <eigen3/Eigen/Dense>
int main()
{
Eigen::VectorXd first = Eigen::VectorXd::Constant(3, 3.14);
std::cout << "first\n" << first << std::endl << std::endl;
Eigen::VectorXd other = std::move(first);
std::cout << "first\n" << first << std::endl << std::endl;
std::cout << "other\n" << other << std::endl << std::endl;
return 0;
}
Выход:
first
3.14
3.14
3.14
first
3.14
3.14
3.14
other
3.14
3.14
3.14
Как я могу включить функцию удаления копии из вышеупомянутого патча в Собственный 3.2.0.?
РЕДАКТИРОВАТЬ:
Кажется, что в семантике ходов классов Eigen нет ничего плохого. Однако есть только дефолт переместить конструкторы и переместить операторы присваивания.
Патч, обеспечивающий явный конструкторы перемещения и операторы перемещения, которые позволяют избежать копирования всех данных, еще не были объединены в версию выпуска.
Я бы хотел знать:
Как применить этот патч к Eigen 3.2.0? Есть ли инструмент или я должен просто изменить файлы вручную.
У кого-нибудь есть опыт использования этого патча?
Я не уверен, почему вы думаете, что эта функция «закончена»: хотя патч был отправлен, эта ошибка, безусловно, все еще открыта, что, как показывает ваш опыт, предполагает, что патч не был объединен с исходным деревом Eigen.
У вас также есть ошибка в вашем тестовом примере: вы, кажется, ожидаете first
быть каким-то образом «пустым» после перемещения, но вместо этого оно будет в неопределенном состоянии. Хотя из первого взгляда на отправку патча видно, что на практике можно ожидать «пустого» результата, в патче недостаточно контекста, чтобы действительно знать, в каком состоянии будет перемещенный объект. Итак, если вы у вас есть другой источник информации, ваши ожидания несколько необоснованны.
Других решений пока нет …