#ifndef _TEMPLATED_CLASS_PARAMETER_H_ #define _TEMPLATED_CLASS_PARAMETER_H_ #include #include "Logger.h" template 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; }; /* * Constructor */ template Parameter::Parameter():pLogger(NULL) { } /* * Store logger pointer */ template void Parameter::SetLogger(Logger* pLogger) { this->pLogger = pLogger; } /* * Call Log method on logger object */ template void Parameter::Log(const std::string message) { if (this->pLogger) { this->pLogger->Log(name + ": " + message); } } /* * Set object name (used in subclass) */ template void Parameter::SetName(std::string name) { this->name = name; } /* * Set new value */ template void Parameter::SetValue(const T& value) { if (this->value!=value) { //SET THE VALUE ON THE HARDWARE //store new value this->value = value; Log("Value changed (" +ToString()+ ") "); } else { Log("No need to change"); } } /* * Get value */ template void Parameter::GetValue(T& value) const { value = this->value; } #endif