Я рефакторинг некоторого кода C ++ для проекта AVR, который использует Sloeber (плагин Arduino для Eclipse).В проекте есть много переменных «настроек», которые хранятся в EEPROM, имеют верхний и нижний пределы, требуют строковых меток и т. Д. Эти настройки имеют разные целочисленные типы (uint8_t
, int32_t
и т. Д.), И я хотел быОболочка, которая может содержать любой из этих типов, с некоторыми методами, унаследованными от базового класса.Я также хотел бы иметь возможность сформировать единый массив из всех переменных параметров, чтобы я мог их перебирать.
Простая реализация, демонстрируемая следующим образом:
// Base class storing a uint8_t by default
class Base {
public:
typedef uint8_t numType;
numType value = 0;
};
// Child class changing 'numType' to a uint16_t
class Child: public Base {
public:
typedef uint16_t numType;
};
Затем выполнитеследующее:
Base baseObj;
baseObj.value = 123;
Child childObj;
childObj.value = 12345;
Я предполагал, что childObj.value
будет uint16_t
, в то время как baseObj.value
останется uint8_t
.
Однако childObj.value
оценивается как 57
, поэтому он все еще рассматривается как uint8_t
.Есть какие-нибудь мысли о способе достижения такого рода вещи?