Я хочу передать объект, созданный классом Ref, в качестве аргумента классу Map, чтобы преобразовать вектор в матрицу, не затрагивая его содержимое.
Например, у меня есть объявление функции:
double obj_fun(const Ref<const VectorXd>& params){
Map<MatrixXd> D(params.data(), 3, 2);
return 0.0;}
Я видел похожие вопросы, такие как Правильное использование класса Eigen и здесь , но ни один из них не касается того, как класс Map взаимодействует с объектами, созданными классом Ref. Из ответа на первый вопрос я могу предположить, что шестой метод поддается изменению ориентации матрицы, но не ее содержимого, что было бы похоже на объявление типа
double obj_fun(Ref<VectorXd>&){(…)}
но это не сработало.
Использование объявления обычным способом в качестве , рекомендованного Eigen , которое я сделал в моем коде выше, или «type 1» в первом связанном вопросе, приводит к ошибке «невозможно преобразовать аргумент 1 из« const double » * 'to' double * '"и возникает аналогичная ошибка, если я использую последний метод (метод 6 в другом вопросе).
Единственный способ заставить его работать - это сделать
double obj_fun(VectorXd& params) {(…)}
что выглядит глупо, так как противоречит соглашению объявлять адреса памяти константами. Следовательно, теперь единственным выходом является передача физической функции моей функции, которой я бы хотел избежать. Тем не менее, я предполагаю, что это безопаснее, так как в противном случае я оставляю адрес памяти, которым можно манипулировать.
Есть ли у кого-нибудь опыт использования класса Map для объектов Ref в Eigen? Любая помощь будет высоко ценится.