2017-07-24 8 views
9

Betrachten Sie die folgende (in Betrieb) Snippet: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); 

Dies wird auch funktioniert:

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

Ich versuche, herauszufinden, warum ich dies aber nicht tun können:

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

ich verwende Eigen 3.3.3 (auch versucht, 3.3.4)

+0

Könnten Sie fügen Sie Ihre Übersetzungsfehler nimmt? –

+4

Probieren Sie "const Eigen :: TensorMap > const_y (const_x.data(), 2, 4);". Beachten Sie das "const double" innerhalb von Eigen :: Tensor. –

+1

Haben Sie den Vorschlag von @CarlodelMundo versucht? Es scheint zu funktionieren, obwohl es keine Standard-Eigensyntax ist - aber das Tensor-Modul als Ganzes folgt nicht mehreren Eigen-Standards (beginnend mit der Bezeichnung "TensorMap" anstelle von "Map " und "Map '). – chtz

Antwort

4

Sie versuchen, einen Const tensor zu speichern.

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

Ich denke, man einen Tensor auf einem const double haben soll (wie von @CarlodelMundo auch erwähnt).

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

In https://eigen.tuxfamily.org/dox/unsupported/TensorMap_8h_source.html scheint es, dass es keinen Konstruktor, der eine const als Parameter-Nachricht 1.

+0

Mir ist der von @CarlodelMundo erwähnte Fix bekannt, aber es fühlt sich nicht eigen-esque an (wie von @chtz aufgezeigt) – user357269