Closed. This question is not reproducible or was caused by typos。它当前不接受答案。












想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

去年关闭。



Improve this question




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

我目前正在为ADC实现一个接口(interface),该接口(interface)可与不同类型的微 Controller 和不同体系结构一起使用。

可悲的是,这将可用的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;

关于c++ - 继承具有多个typename模板参数的template <typename T,T max,T min>结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56483954/

10-11 18:22