Re: [eigen] Map questions

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


> indeed, "Map<Vector3d>(a) = v;" seems to be equivalent to
> "Map<Vector3d> a = v;" that is very unfortunate...

Ah thanks for the explanation, I was puzzled.

Maybe we can at least block this form by disabling the default constructor for 
class Map (private inheritance trick)? I mean, in the "Map<Vector3d> a = v;" 
construction, the constructor used for A must be the default constructor 
(then followed by operator=) since there is no Map constructor taking v as 
argument. Right?

> I could keep going like this forever, but nothing is really good and
> intuitive. Perhaps this is a good motivation to resurrect the
> Matrix::Map static functions.... ???

The idea behind letting the user construct named Map objects versus a static 
method, was that it makes the user's code lighter when using a Map object 
repeatedly. If you have a buffer that you want to map as a vector and use 
that repeatedly, it is much ligher to do "Map<Vector3d> m(buffer);" and use m 
henceforth. So I think we want to keep supporting created named Map objects 
as part of our public API (and keep considering this the recommended way in 
the documentation).

I mean, we can always reintroduce the static methods, that would indeed offer 
an nice alternative in the situation where a Map object is used only once, 
but that doesn't solve the problem for other users who want a permanent Map 
object.

Cheers,
Benoit


On Wednesday 29 October 2008 22:51:34 Gael Guennebaud wrote:
> Hi,
>
> On Wed, Oct 29, 2008 at 9:01 PM, Cristóvão Sousa <crisjss@xxxxxxxxx> wrote:
> > Hi,
> >
> > I would like to do something like
> >
> >  Vector3d v;
> >  // v = something;
> >  double a[3];
> >  Map<Vector3d>(a) = v;
>
> indeed, "Map<Vector3d>(a) = v;" seems to be equivalent to
> "Map<Vector3d> a = v;" that is very unfortunate...
>
> Actually the following variants works:
>
> Map<Vector3d>(a,3) = v;
>
> (Map<Vector3d>(a)) = v;
>
> Map<Vector3d>(a).operator=(v);
>
> Map<Vector3d>(a).lazyAssign(v);
>
> Map<Vector3d> _a(a);  _a = v;
>
> Map<Vector3d>(a).start<3>() = v;
>
> ...
>
> I could keep going like this forever, but nothing is really good and
> intuitive. Perhaps this is a good motivation to resurrect the
> Matrix::Map static functions.... ???  or find something else....
>
> > Another thing that could be a little bug:
> > it is currently possible to do
> >
> >  const double a[3]={1,2,3};
> >  Map<Vector3d>(a).setZero();
> >
> > , which discards the const qualifier of a.
>
> ok, I'll check later if we can do something for that, but  there is
> nothing urgent here.
>
> cheers,
> gael.



---


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/