从具有typename的多个模板参数的template <typename T,T max,T min>结构继承

时间:2019-06-06 19:29:25

标签: c++ c++11 templates inheritance

这是我多年来一直感激访客后在此平台上的第一个问题。请对我好一点。

我目前正在为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是否提供另一种方法来实现我要执行的操作? 这通常是合理的模式/想法吗? 还是我应该写另一个包装这些参数的模板?

对于包括深度阅读在内的任何帮助或提示的信息,将不胜感激。 预先感谢。

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

1 个答案:

答案 0 :(得分:0)

也许

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;