c++ - 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){}
有更好/更清洁的解决方案吗?
解决方案
推荐阅读
- python - AttributeError:“元组”对象在使用 LGBMClassifier 包装器时没有属性“编码”
- android-studio - 在 .gitignore 文件中添加像 *folder 这样的文件夹是错误的吗?
- ios - gestureRecognizerShouldBegin on Subview Blocking Gestures on Parent CollectionView
- python - 运行 turtle.py 时出现问题,似乎无法让模块正常运行
- javascript - 使用 javascript globalThis 进行状态管理
- r - 如何更改栅格图中的比例?
- ruby-on-rails - 如何在 Rails 6.0 中翻译 ActiveModel 属性值
- javascript - 散列对象层次结构
- x86 - Linux 等操作系统如何将可执行文件加载到虚拟内存中?
- javascript - 在选中单选按钮的情况下处理警报事件,反应 JS