我有一个用 C 编写的 MCU 外围设备的硬件抽象层。应用程序代码通过 C++ 包装器使用外围设备。现在我有一个低级枚举ll_enum
和一个函数,它需要一个具有这种数据类型的参数。
我对一个好的架构的理解意味着以下几点:
- 低级外设驱动程序 (C)
- 不应该知道还有更高的层次
- 有枚举的定义
- C++ 包装器
- 明明知道底层并且有应用
- 使用 C++ Wrapper 的应用程序代码
- 只知道 C++ Wrapper
我现在的解决方案:
我在 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);
显然这是一个糟糕的解决方案,因为你必须在两个位置更改代码,如果你错过了就会遇到麻烦。
有更好的解决方案吗?