2017-07-24 2 views
9

Considérez ce qui suit (travail) extrait:Eigen const TensorMap

Eigen::ArrayXd x (8); 
x << 1, 2, 3, 4, 5, 6, 7, 8; 
Eigen::TensorMap<Eigen::Tensor<double, 2>> y (x.data(), 2, 4); 

C'est fonctionne aussi:

const Eigen::ArrayXd const_x = x; 
const Eigen::Map<const Eigen::ArrayXXd> z (const_x.data(), 2, 4); 

J'essaie de comprendre pourquoi je ne peux pas le faire si:

const Eigen::TensorMap<const Eigen::Tensor<double, 2>> const_y (const_x.data(), 2, 4); 

J'utilise Eigen 3.3.3 (également essayé 3.3.4)

+0

Pouvez-vous ajouter votre compilation message d'erreur? –

+4

Essayez "const Eigen :: TensorMap > const_y (const_x.data(), 2, 4);". Notez le "const double" dans Eigen :: Tenseur. –

+1

Avez-vous essayé la suggestion de @CarlodelMundo? Cela semble fonctionner, même si ce n'est pas une syntaxe Eigen standard - mais le module Tensor dans son ensemble ne suit pas plusieurs standards Eigen (en commençant par le nommer 'TensorMap', au lieu de' Map 'et' Map '). – chtz

Répondre

4

Vous essayez de stocker un tenseur const.

Error 2 error C2664: 'Eigen::TensorMap<PlainObjectType>::TensorMap(double *,__w64 int,__w64 int)' : impossible to convert parameter 1 from 'const double *' to 'double *' 

Je pense que vous vouliez dire d'avoir un tenseur sur un const double (comme mentionné par @CarlodelMundo aussi).

const Eigen::TensorMap<Eigen::Tensor<const double, 2>> const_y(const_x.data(), 2, 4); 

En https://eigen.tuxfamily.org/dox/unsupported/TensorMap_8h_source.html il semble qu'il n'y a pas de constructeur qui prend un const comme paramètre 1.

+0

Je suis au courant du correctif mentionné par @CarlodelMundo, mais il ne se sent pas Eigen-esque (comme l'a souligné @chtz) – user357269