--- /dev/null
+#ifndef __FITNESS_FITNESS_H
+#define __FITNESS_FITNESS_H
+
+#include "../chromosome.h"
+
+namespace genetic {
+ /**
+ * Base Fitness template class. It should be a base class for any custom
+ * fitness functions.
+ */
+ template < typename _Chromosome, typename _Value = double >
+ class Fitness {
+ template<typename> friend class Selection ;
+ public:
+ typedef typename _Chromosome::GeneType GeneType;
+ typedef _Value ValueType;
+ protected:
+ _Chromosome chromosome;
+
+ /*
+ * Some calculations here...
+ */
+ virtual _Value do_calculate() = 0;
+
+ public:
+ Fitness() {}
+
+ Fitness(_Chromosome& _chromosome)
+ : chromosome(_chromosome.get()) {
+ }
+
+ _Value calculate() {
+ return this->do_calculate();
+ }
+ };
+}
+
+#endif /* __FITNESS_FITNESS_H */