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。
因此我想到了这个:
例如,可能有一个提供12位分辨率的ADC。这可以在单端或差分模式下使用,从而导致如下用法:
不幸的是,这不能编译。结果错误消息是
老实说,我无法确定此错误消息所暗示的内容。
我进行了一些研究,但未能找到类似的问题,该问题已涵盖在内。
我究竟做错了什么? c++ 11是否提供另一种方法来实现我要执行的操作?
这通常是合理的模式/想法吗?
还是应该编写另一个包装这些参数的模板?
对于包括深度阅读在内的资源的任何帮助或提示,将不胜感激。
提前致谢。
编辑:
在代码中固定整数类型的大小,错字与问题无关
?
无论如何,对于
想改善这个问题吗?更新问题,以便将其作为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