Мы экспериментируем с ограничением primitive types
в нашем проекте, где мы можем проверить, что экземпляры производных классов имеют значение данных в допустимом диапазоне (min
и max
переменные-члены, защищенные в базе class
)для этого производного class
.
Мой вопрос: есть ли способ, которым я могу статически инициализировать переменные min
и max
производного класса, только один раз на производное class
, а не каждый раз, когда ясоздать экземпляр производного class
.
В C#
это будет в статическом блоке инициализации, но я не уверен, как это сделать в C++
.
Я знаю, что яможет инициализировать их в производном class constructor
, но это кажется расточительным делать это каждый раз.
Я думаю, что я ищу абстрактные элементы данных, объявленные в базовом классе, но впоследствии статически определенные в производных классах.
class BoundedFloat
{
public:
BoundedFloat(const float v) : Value(v) {}
// some common methods that use Min and Max
// prefer to implement in base class rather than in each derived class
bool withinBounds();
bool breachedLowerThreshold();
bool breachedUupperThreshold();
protected:
const float Min;
const float Max;
float Value;
}
bool BoundedFloat::withinBounds()
{
return ((Value >= Min) && (Value<= Max));
}
bool BoundedFloat::breachedLowerThreshold()
{
return (Value < Min);
}
bool BoundedFloat::breachedUupperThreshold()
{
return (Value > Max);
}
class Temperature : public BoundedFloat
{
public:
Temperature(const float v) : BoundedFloat(v) {}
// seems wasteful to do this each time, when min and max only need
// initialised once per derived class
// Temperature(const float v) : BoundedFloat(v, -40.0f, 80.0f)
// statically initialise Temperature's Min and Max in base class here somehow?
private:
// I know this is wrong, but it indicates the functionality I'm looking for.
override static float Min;
override static float Max;
}