Definition of Genetic Operators

Bodsch, Norbert Norbert.Bodsch at
Thu Aug 24 06:04:52 EDT 2000

Hi all,

I recently started using galib. My question is about the definition of the
Genetic operators.

On page 11 of the galib documentation I find:

   template<class T> int
   OnePointCrossover(const GAGenome& p1, const GAGenome& p1, GAGenome* c1,
GAGenome* c1) 
      GAListGenome<T> &mom = (GAListGenome<T> &) p1;

What's the reason for this cast? My interpretation is: The parameter list
contains two references to objects of class GAGenome which are the parents.
These two references are then casted to GAListGenome<T> &. But in my
opinion, this makes sense only if the casting is possible at all. So the
caller has to hand over references to objects of class GAListGenome<T> or
subclasses of it. So why is this global function not defined this way?:

   template<class T> int
      const GAListGenome<T>& p1, const GAListGenome<T>& p1, 
      GAListGenome<T>* c1, GAListGenome<T>* c1) 

Norbert Bodsch

More information about the galib mailing list