2014-07-16 01:03:52 +01:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
class DefaultVariable
|
|
|
|
{
|
|
|
|
public:
|
2018-07-15 13:51:05 +01:00
|
|
|
DefaultVariable(const T & value)
|
|
|
|
{
|
|
|
|
defaultValue = value;
|
|
|
|
}
|
|
|
|
DefaultVariable<T> & operator =(const T & value)
|
|
|
|
{
|
|
|
|
currentValue = value;
|
|
|
|
is_default = currentValue == defaultValue;
|
|
|
|
is_explicit = true;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
operator const T &() const
|
|
|
|
{
|
|
|
|
return is_default ? defaultValue : currentValue;
|
|
|
|
}
|
|
|
|
bool isDefault() const
|
|
|
|
{
|
|
|
|
return is_default;
|
|
|
|
}
|
|
|
|
bool isExplicit() const
|
|
|
|
{
|
|
|
|
return is_explicit;
|
|
|
|
}
|
2014-07-16 01:03:52 +01:00
|
|
|
private:
|
2018-07-15 13:51:05 +01:00
|
|
|
T currentValue;
|
|
|
|
T defaultValue;
|
|
|
|
bool is_default = true;
|
|
|
|
bool is_explicit = false;
|
2014-07-16 01:03:52 +01:00
|
|
|
};
|