具有多个 typename 模板参数的结构,c++,c++11,templates,inheritance"/>

首页 > 解决方案 > 从模板继承具有多个 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 是否提供了另一种方法来实现我想要做的事情?这通常是一个合理的模式/想法吗?或者我应该写另一个模板来包装这些参数?

任何有关资源的帮助或提示,包括更深入的阅读,将不胜感激。提前致谢。

编辑:代码中的固定整数类型大小,与问题无关的错字

标签: c++c++11templatesinheritance

解决方案


也许

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;

推荐阅读