gpt4 book ai didi

c++ - 在 C++ 中拆分硬件相关类

转载 作者:搜寻专家 更新时间:2023-10-31 02:02:21 24 4
gpt4 key购买 nike

<分区>

我想问问您对在 C++ 中拆分硬件相关代码的最佳方式的看法。目前我有一个类正在实现使用#ifdef 的温度传感器接口(interface):

class TemperatureSensor : public TemperatureI
{
TemperatureSensor()
{
#ifdef PLATFORM_A
/* Platform A dependant code */
#elsif PLATFORM_B
/* Platform B dependant code */
#endif
}

~TemperatureSensor()
{
#ifdef PLATFORM_A
/* Platform A dependant code */
#elsif PLATFORM_B
/* Platform B dependant code */
#endif
}

int getTemp()
{
#ifdef PLATFORM_A
/* Platform A dependant code */
#elsif PLATFORM_B
/* Platform B dependant code */
#endif
}
};

当然有一些方法和超过 1 行硬件相关代码。

现在我想要的是:

  1. 从代码中一起删除 ifdefs,或者如果不可能,将其限制在一个地方
  2. 将创建正确实现的决定移至编译时(使用 CMakeLists.txt)
  3. 尽可能少的样板代码(可以有一个辅助类,因为我打算在多个地方使用这个解决方案,但每个地方都应该有最小的开销)

一种解决方案是使用 PIMPL 和工厂,但不幸的是,这会导致过多的文件和大量的间接访问。

  • 温度传感器.cpp
  • 温度传感器.hpp
  • TemperatureSensorPlatformFactory.hpp
  • TemperatureSensorPlatformA.cpp
  • TemperatureSensorPlatformA.hpp
  • TemperatureSensorPlatformAFactory.cpp
  • TemperatureSensorPlatformB.cpp
  • TemperatureSensorPlatformB.hpp
  • TemperatureSensorPlatformBFactory.cpp

以及以下代码:

class TemperatureSensor : public TemperatureI
{
TemperatureSensor() :
pImpl(TemperatureSensorFactory.create())
{}

int getTemp()
{
return pImpl.getTemp();
}
};

你有什么更好的想法吗?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com