[Dune] Iterators for fake reference types

Carsten Gräser graeser at math.fu-berlin.de
Fri Nov 20 14:08:10 CET 2009


By the way: The same problem arises if we want to have an
implementation of BDMatrix that does not waste memory.

Carsten

Carsten Gräser schrieb:
> Dear all,
> while trying to run the matrix test with ScaledIdentityMatrix
> and DiagonalMatrix the following question arose:
> 
> Suppose you have an iterator 'it' for a pseudo container returning
> fake references of type 'RefT' that should behave similar to 'T&'.
> 
> This is e.g. done in std::vector<bool>, BitSetVector and the above
> matrix classes. While RefT refers to an elementary type for
> vector<bool> this is not true in the cases. Thus one would like
> to call methods of RefT which is always safe in the temporary scope.
> Taking addresses is obviously forbidden.
> 
> 	(*it).f(); 	// OK
> 	&(*it);   	// not OK
> 
> The leeds to the ugly fact that you can not use
> 
> 	it->f();
> 
> Since '->' does not allow creation of a temp object. The only 'solution'
> I can imagine would be to return an auto_ptr to a RefT created on the
> heap. However then
> 
> 	(*it).f();
> 	it->f();
> 
> would do fundamentally different thing an the latter would
> (unexpectedly for the user) be much slower.
> 
> Does anyone have idea I missed how to solve this ?
> 
> Regards
> Carsten
> 


-- 
----------------------------------------------------------------------
Carsten Gräser           | phone: +49-30 / 838-75349
Freie Universität Berlin | fax  : +49-30 / 838-54977
Institut für Mathematik  | email: graeser at math.fu-berlin.de
Arnimallee 6             |
14195 Berlin, Germany    | URL  : http://page.mi.fu-berlin.de/graeser
----------------------------------------------------------------------




More information about the Dune mailing list