我想从头文件中定义的接口中隐藏实现特定的细节,以便在进行更新时代码可维护且编译速度更快(尽管我没有后者的统计信息)。
但是,我不能使用 2003 年以后的动态内存或 c++(2017 年 11 月 14 日)。我也不能使用像 boost 这样的库。该应用程序是实时嵌入式的,因此效率很重要。有问题的代码与硬件紧密耦合。
我在这里查看了几篇建议 PIMPL 习语的帖子,但是间接和动态内存似乎禁止这样做。一种选择是预先分配类并设置指针,但这似乎不灵活。
下面是一个在实现文件中仅使用函数和静态变量的过度简化示例;是否存在与封装或编译过程相关的问题?考虑到这些限制,我还能如何实现上述目标?
标题中包含详细信息的示例:
#ifndef HARDWARE_IF_HPP
#define HARDWARE_IF_HPP
class hardware_if
{
public:
enum cfg_mode { standby, enable, disable };
void configure(cfg_mode mode);
private:
void hardware_if_standby();
void hardware_if_enable();
void hardware_if_disable();
static const uint32_t CONTROL_REGISTER = 0x10000000;
static const uint32_t ENABLED_MODE = 2;
static const uint32_t DISABLED_MODE = 3;
};
#endif
// CPP
#include <cstdio>
#include <stdint.h>
#include "hardware_if.hpp"
void hardware_if::hardware_if_standby()
{
printf("set hardware into standby state; write %X to 0x%X\n",
STANDBY_MODE, CONTROL_REGISTER);
}
void hardware_if::hardware_if_enable()
{
printf("set hardware into enabled state; write %X to 0x%X\n",
ENABLED_MODE, CONTROL_REGISTER);
}
void hardware_if::hardware_if_disable()
{
printf("set hardware into disabled state; write %X to 0x%X\n",
DISABLED_MODE, CONTROL_REGISTER);
}
void hardware_if::configure(cfg_mode mode)
{
switch (mode)
{
case standby:
hardware_if_standby();
break;
case enable:
hardware_if_enable();
break;
default:
hardware_if_disable();
break;
}
}
//
#include <stdint.h>
#include "hardware_if.hpp"
int main()
{
hardware_if hdw;
hdw.configure(hardware_if::enable);
return 0;
}
实施细节示例:
#ifndef HARDWARE_IF_HPP
#define HARDWARE_IF_HPP
class hardware_if
{
public:
enum cfg_mode { standby, enable, disable };
void configure(cfg_mode mode);
};
#endif
// CPP
#include <cstdio>
#include <stdint.h>
#include "hardware_if.hpp"
static const uint32_t CONTROL_REGISTER = 0x10000000;
static const uint32_t STANDBY_MODE = 1;
static const uint32_t ENABLED_MODE = 2;
static const uint32_t DISABLED_MODE = 3;
void hardware_if_standby();
void hardware_if_enable();
void hardware_if_disable();
void hardware_if_standby()
{
printf("set hardware into standby state; write %X to 0x%X\n",
STANDBY_MODE, CONTROL_REGISTER);
}
void hardware_if_enable()
{
printf("set hardware into enabled state; write %X to 0x%X\n",
ENABLED_MODE, CONTROL_REGISTER);
}
void hardware_if_disable()
{
printf("set hardware into disabled state; write %X to 0x%X\n",
DISABLED_MODE, CONTROL_REGISTER);
}
void hardware_if::configure(cfg_mode mode)
{
switch (mode)
{
case standby:
hardware_if_standby();
break;
case enable:
hardware_if_enable();
break;
default:
hardware_if_disable();
break;
}
}
//
#include <stdint.h>
#include "hardware_if.hpp"
int main()
{
hardware_if hdw;
hdw.configure(hardware_if::enable);
return 0;
}