首页 > 解决方案 > C++ 中的抽象硬件依赖关系

问题描述

我正在尝试抽象出嵌入式应用程序的硬件依赖项。

我有一个接口(frameWriterI.h)

template<typename Message)    
class FrameWriterI
{
     public:
        virtual void writeMessage(Message m)=0;
}

有多个像这样的实现

(writerA.h)
class WriterA : public FrameWriterI<MessageA>
{
   public:
     void writeMessage(MessageA m)
}
(writerA.cpp)
void WriterA::writeMessage(MessageA m)
{
     /*use a DAC to write m with a format specific to A*/
     somethingReallyHardwareSpecific();
}

在上面的层中,每个实现(A、B、C)有 1 个使用相关 Writers 的状态机

 class StateMachineA:
 {
    public:
        void doSomethingThatUseWriterA();
    private:
         WriterA writer;
}

问题是现在,我的状态机依赖于硬件。因此,为了模拟编写器进行单元测试,我应该改用接口:

 class StateMachineA:
 {
    public:
        void doSomethingThatUseWriterA();
    private:
         FrameWriterI<MessageA>& writer;
}

但是我在哪里初始化真正的 WriterA?

在构造函数中我不能引用临时

(StateMachineA.cpp)
StateMachineA::StateMachineA(): writer(WriterA()){} //not valid

我尽量避免使用指针(有限的堆空间和编码偏好),但如果这是我可以接受的唯一解决方案,但它不能动态分配。

到目前为止,我发现的唯一解决方案是有一个文件范围的变量

(StateMachineA.cpp)
WriterA realWriter;
StateMachineA::StateMachineA(): writer(realWriter){}

有更好/更清洁的解决方案吗?

标签: c++embeddedabstract-classhardware-interface

解决方案


推荐阅读