Правильный способ передачи объектов Ref Eigen в класс Map, чтобы избежать ошибки преобразования - PullRequest
0 голосов
/ 30 октября 2018

Я хочу передать объект, созданный классом 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? Любая помощь будет высоко ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...