#ifndef _TEMPLATED_CLASS_PARAMETER_H_
#define _TEMPLATED_CLASS_PARAMETER_H_
#include <iostream>
#include "Logger.h"
template<typename T> class Parameter {
private:
T value;
std::string name;
Logger* pLogger;
public:
Parameter();
~Parameter() {};
void SetLogger(Logger* pLogger);
void Log(const std::string message);
virtual std::string ToString() = 0;
void SetName(std::string name);
virtual void SetValue(const T& value);
void GetValue(T& value) const;
};
template<typename T> Parameter<T>::Parameter():pLogger(NULL) {
}
template<typename T> void Parameter<T>::SetLogger(Logger* pLogger) {
this->pLogger = pLogger;
}
template<typename T> void Parameter<T>::Log(const std::string message) {
if (this->pLogger) {
this->pLogger->Log(name + ": " + message);
}
}
template<typename T> void Parameter<T>::SetName(std::string name) {
this->name = name;
}
template<typename T> void Parameter<T>::SetValue(const T& value) {
if (this->value!=value) { this->value = value;
Log("Value changed (" +ToString()+ ") ");
}
else {
Log("No need to change");
}
}
template<typename T> void Parameter<T>::GetValue(T& value) const {
value = this->value;
}
#endif