Я недавно обновился до последней версии Eigen (3.3.90), и похоже, что это сломало то, что я работал раньше (до этого я использовал версию Eigen 3.2.10, поставляемую с библиотекой libigl).
Я хотел бы сохранить результат блока в объекте ref, который будет передан и в конечном итоге использован для обновления внутренних элементов формы матрицы, из которой извлечен блок.
Минимальный пример, который нескомпилируйте больше:
#include <Eigen/Dense>
int main(int argc, char *argv[])
{
typedef Eigen::Matrix<bool, Eigen::Dynamic, 1> Mtype;
typedef Eigen::Block<Mtype> Btype;
typedef Eigen::Ref<Mtype> Rtype;
Mtype m(2, 1);
Btype bm = m.block(0, 0, 1, 1);
Rtype rm = m; // OK
Rtype rbm = bm; // Visual studio 2017 error C2440: 'initialisation' : impossible conversion
}
Обратите внимание, что версия const работает, я думаю, это связано со специализацией Ref для const, которая воссоздает временную копию:
typedef Eigen::Ref<const Mtype> CRtype;
CRtype crbm = bm; // OK
Аналогично, используяТип матрицы с и числом строк и столбцов Динамический , также компилируется:
typedef Eigen::Matrix<bool, Eigen::Dynamic, Eigen::Dynamic> Mtype;
typedef Eigen::Block<Mtype> Btype;
typedef Eigen::Ref<Mtype> Rtype;
Mtype m(2, 1);
Btype bm = m.block(0, 0, 1, 1);
Rtype rbm = bm;
Любые подсказки?
Большое спасибо!
С уважением,
Джером