首页 > 解决方案 > 为什么要在 C++ 中预定义模板参数类型?

问题描述

我正在为一个项目编写一些代码,我正在使用一个名为 APA102 的库。在这个库中,有一个标题APA102定义如下的类,

template<uint8_t dataPin, uint8_t clockPin>
class APA102 : public APA102Base {
...

我很困惑为什么有人会使用模板类来定义一个可以很容易地作为类构造函数参数传递的值。

为了扩展我最初的问题,我试图创建一个使用此类APA102作为参数的类方法,但是如果我尝试执行以下操作,则无法将参数定义为这种类型:

void someMethod(APA102<uint8_t, uint8_t> &param)

当我不断收到错误消息时

错误:'template<unsigned char dataPin, unsigned char clockPin> class Pololu::APA102' 的模板参数列表中参数 1 的类型/值不匹配
     virtual void someMethod(APA102<const uint8_t, const uint8_t> &ledStrip) = 0;

我可以将APA102对象作为参数的唯一方法是定义两个uint8_t值,然后首先将它们用作模板参数。例如,这有效:

const uint8_t clockPin = 11;
const uint8_t dataPin = 12;
virtual void someMethod(APA102<clockPin, dataPin> &ledStrip) = 0;

谁能帮我理解这些带有预定义模板参数的模板类?为什么我得到了我所做的错误?

标签: c++templatesparameters

解决方案


推荐阅读