--- /dev/null
+#ifndef __GENE_H
+#define __GENE_H
+
+namespace genetic {
+
+ /**
+ * Class representing Gene
+ */
+ template < typename Type >
+ class Gene {
+ protected:
+ /**
+ * Value of the Gene
+ * This for example can be a primitive value such as: int or double, or
+ * with additional changes complex struct.
+ */
+ Type value;
+
+ template<typename> friend class Gene;
+ public:
+ /**
+ * Default constructor
+ */
+ Gene() {}
+
+ /**
+ * Class constructor, initializes Gene with default value.
+ */
+ Gene(Type value) {
+ this->value = value;
+ }
+
+ /** Copy constructor */
+ Gene(const Gene& gene) : value(gene.value) {}
+
+ /**
+ * Copy operator.
+ *
+ * @param gene Gene from which the value should be copied.
+ * @return Gene instance containing copied value
+ */
+ Gene& operator=(const Gene& gene) {
+ this->value = gene.value;
+ return *this;
+ }
+
+ /**
+ * Allows read-only access to Gene value
+ */
+ Type get() const {
+ return value;
+ }
+ };
+}
+
+#endif /* __GENE_H */