У меня есть уровень аппаратной абстракции для периферийного устройства MCU, который написан на C. Код приложения использует периферийное устройство через оболочку C ++. Теперь у меня низкий уровень enum ll_enum
и функция, которая требует параметр с этим типом данных.
Мое понимание хорошей архитектуры подразумевало бы следующее:
Мое решение прямо сейчас:
У меня есть перечисление в C ++ Wrapper, которое имеет те же записи, что и перечисление низкого уровня. Перечисление приводится к низкоуровневому типу в C ++ Wrapper.
// ### C++ Wrapper ###
enum hl_enum {
foo = 1,
bar = 2,
}
void Peripheral::hl_function(hl_enum param) {
ll_function((ll_enum)param);
}
// ### Low level C-file ###
typedef enum {
foo = 1,
bar = 2,
} ll_enum;
void ll_function(ll_enum param);
Очевидно, что это плохое решение, потому что вы должны изменить код на двух позициях и попасть в неприятности, если пропустили это.
Есть ли лучшее решение?
Задача ещё не решена.
Других решений пока нет …