2

我有一个用 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);

显然这是一个糟糕的解决方案,因为你必须在两个位置更改代码,如果你错过了就会遇到麻烦。

有更好的解决方案吗?

4

0 回答 0