J'ai besoin d'une fonction lambda qui convertit un Eigen::VectorXd
en un Eigen::MatrixXd
et malheureusement cela ne fonctionne pas lorsque j'essaie de passer par la référence const. Pourquoi je ne peux pas faire ça? Des solutions de contournement?C++ Fonction lambda qui convertit Eigen :: VectorXd en Eigen :: MatrixXd
#include <Eigen/Dense>
#include <iostream>
typedef Eigen::Matrix< double, Eigen::Dynamic, 1 > Vec;
typedef Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > Mat;
int main(int argc, char **argv) {
Vec v (3);
v(0) = 1.0;
v(1) = 2.0;
v(2) = 3.0;
auto lambda = [](Vec vec) {return Eigen::Map<Mat>(vec.data(), vec.size(), 1);};
Mat m = lambda(v);
std::cout << m(0,0) << "\n";
std::cout << m(1,0) << "\n";
std::cout << m(2,0) << "\n";
// does not work
auto lambda2 = [](const Vec& vec) {return Eigen::Map<Mat>(vec.data(), vec.size(), 1);};
return 0; }
Le message d'erreur est error: invalid conversion from 'const Scalar* {aka const double*}' to 'Eigen::Map<Eigen::Matrix<double, -1, -1>, 0, Eigen::Stride<0, 0> >::PointerArgType {aka double*}' [-fpermissive]
Le compilateur vous dit que vous essayez de convertir quelque chose qui est co nstant ('const Scalar *') à non constant. Je n'ai pas l'en-tête 'Eigen' donc je devine ici que le constructeur' Matrix' n'aime pas que 'vec.data()' soit const – ZivS
Essayez d'ajouter 'typedef Eigen :: Matrix CMat; 'et voir si' auto lambda2 = [] (const Vec & vec) {return Eigen :: Carte (vec.data(), vec.size(), 1);}; 'compile –
ZivS
@ZivS non qui ne fonctionne pas, désolé. – Taylor