c++ - 从模板继承具有多个 typename 模板参数的结构
问题描述
这是我多年来作为一个感激的访客使用这个平台后的第一个问题。请对我温柔一点。
我目前正在为 ADC 实现一个接口,该接口可与不同类型的微控制器和不同架构一起使用。
遗憾的是,这将可用的 c++ 版本限制为 11,以保证 MCU 之间的兼容性。
这个想法是定义一个通用的 API ADC 结构,其中传递了一个固定宽度整数类型的类型名,以及 ADC 的最大可实现的 Min 和 Max 值。这两个值旨在存储为 constexpr。
因此我想出了这个:
template<typename T, T max, T min>
struct ADC
{
public:
static constexpr T maximum = max;
static constexpr T minimum = min;
virtual void reset() = 0;
// ...
};
template<typename T, T max, T min>
struct xyzAdc : ADC<typename T, T max, T min>
{
public:
uint8_t someSpecificADCStuff = 0xac; // arbitrarily chosen
// ....
};
例如,可能有一个提供 12 位分辨率的 ADC。这可以在单端或差分模式下使用,导致使用如下:
xyzADC<uint16_t, 0, 4095> singleEndedADC;
// or
xyzADC<int16_t, -2048, 2047> diffADC;
不幸的是,这不能编译。产生的错误信息是
error: wrong number of template arguments (1, should be 3)
struct xyzAdc : ADC<typename T, T max, T min>
老实说,我不知道这个错误消息暗示了什么。我做了一些研究,但找不到一个类似的问题,其中涵盖了这一点。
我究竟做错了什么?c++11 是否提供了另一种方法来实现我想要做的事情?这通常是一个合理的模式/想法吗?或者我应该写另一个模板来包装这些参数?
任何有关资源的帮助或提示,包括更深入的阅读,将不胜感激。提前致谢。
编辑:代码中的固定整数类型大小,与问题无关的错字
解决方案
也许
template<typename T, T max, T min>
struct xyzAdc : ADC<T, max, min> // no "<typename T, T max, T min>"
{ // ...............^..^^^..^^^
public:
uint8_t someSpecificADCStuff = 0xac; // arbitrarily chosen
// ....
};
?
无论如何,4095
对于一个来说太过分了std::uint8_t
xyzADC<uint8_t, 0, 4095> singleEndedADC;
推荐阅读
- html - 我正在尝试使 2 个 h1 标签不相互重叠,但在同一行上具有不同的高度
- c# - Asp.net 必填字段验证器在按钮单击时不起作用
- python - 由于未知原因,OpenAI Gym LunarLander 的执行速度大大减慢
- python-3.x - 如何删除包含 '\u200' 作为子词的单词?
- python - 使用 SQLalchemy 在数据库中存储数组
- django - 如何在 django 的一个表单/视图中创建两个通过外键相互关联的对象?
- office-js - 如何启用/禁用功能区命令 officejs
- javascript - 如何在反应中从提供者返回承诺
- java - AndroidViewModel 没有零参数构造函数
- javascript - Problem adding a pause/play to responsive slider / carousel. JS CSS HTML No bootstrap or Jquery