[Dune] Es wird immer besser ...

Peter Bastian Peter.Bastian at iwr.uni-heidelberg.de
Thu Mar 27 17:21:09 CET 2003


Hi,


Hab gerade entdeckt, dass die autmatische Deduktion
von template parametern auch für template template parameter
funktioniert.

damit kann man folgendes hinschreiben:

...

template< int dim, 
          int dimworld, 
          class ct, 
          template<int,int> class grid, 
          template<int,int,int> class leveliterator, 
          template<int,int,int> class entity>  
inline void foo (Grid<dim,dimworld,ct,grid,leveliterator,entity>& g)
{
	for (leveliterator<0,dim,dimworld> i=g.lbegin<0>(0); i!=g.lend<0>(0);
++i)
	{
		std::cout << i->level() << std::endl;
	}
}

int main ()
{	
	// make object of concrete class
	SGrid<3,3> sgrid( Tupel<int,3>(1,1,2) , Tupel<double,3>(1.0,1.0,1.0) ,
8 );

	// call generic function
	foo(sgrid);

	return 0;
}

Der Aufruf foo(sgrid) deduziert auch die anderen templates (!), die
das Grid benötigt. Damit arbeitet jetzt foo wirklich auf den
Basisklassen und verwendet den vollen Barton-Nackman !
Die Sache mit den nested classes können wir uns damit vollkommen
sparen, d.h. man muss nun den LevelIterator nicht mehr aus dem Grid
rausholen. Ich bin dafür wir machen es wie oben, denn dann sind alle
LevelIterator auch miteinander kompatibel (Bei uns ist ein LevelIterator
aus dem Grid ein anderer als der aus der Entity).

Was meint ihr?


Grüße

-- Peter
------------------------------------------------------------------
Peter Bastian, IWR,Uni Heidelberg, INF 348,R 020, 69120 Heidelberg
email: Peter.Bastian at iwr.uni-heidelberg.de   Tel: +49 6221 54 4984
WWW: http://www.iwr.uni-heidelberg.de/~Peter.Bastian Fax: ... 8860




More information about the Dune mailing list