【问题标题】:Setting a function from one object to called by another object in arduino library将函数从一个对象设置为由 arduino 库中的另一个对象调用
【发布时间】:2014-01-03 17:52:36
【问题描述】:

我对用 C 编写有点陌生,所以我希望我在这里不会离题太远。

我正在开发一个库来处理对多种类型的 LED IC 的控制。有大量不同类型的 RGB 像素库,每个库都有自己独特的命名,但都执行相同的基本操作。创建一个“条”或“链”对象,每个像素设置一个颜色值,然后更新条。

我的库在后台处理从软件获取像素颜色值,并为用户提供属于该对象的数组中的最新值。

我想要的是允许用户启动他们的 LED 灯条对象并将对该对象的引用传递给我的库,然后允许他们传递他们的对象“setPixelColor()”函数和“UpdateStrip()”函数也去图书馆。如果这是可以实现的,那么我相信我的库可以处理任何给定 PixelLibrary 的所有灯光控制操作。

我相信我正在寻找的是在对象之间传递函数指针的正确方法?不是找人为我做这件事,而是寻求指导。今天早上一直在搜索谷歌,但我不知道我什至使用了正确的术语。任何建议或指导都会有很大帮助。谢谢!

【问题讨论】:

  • cc++?请具体点!并且最好显示一些你已经尝试过的代码......
  • 查找函数指针,是的。还要查找成员函数指针、静态成员函数指针以及您可以 evtl 的内容。在 c++ 中传递对象上下文(通常使用 c 中的结构/句柄完成)。

标签: c++ arduino libraries led


【解决方案1】:

听起来您需要的是基类或虚拟基/接口。您定义一个具有通用数据和方法的类,这些数据和方法适用于所有 LED。这个通用或抽象类定义了通用功能。然后,您的每种 LED 链类型都将继承基类/接口并实现特定功能以设置 LED。

使用这种方法,应用程序代码使用基类/接口方法以相同的方式处理所有链。

如果您使用这种方法,我还建议您创建一个静态工厂方法,该方法在创建特别需要的对象后返回一个基类/接口指针。

abstractController=CreateLEDStrandController("Strand Type");//创建正确的对象,返回一个抽象的基类指针。

abstractController.SetLEDColor("RED"); //其实是调用了具体的对象SetLEDColor

【讨论】:

  • 我不知道当前编译器是否可以利用这些信息,但在这些情况下,将派生类中的方法标记为 final 是一个好习惯。该关键字将告诉编译器不允许进一步的派生类拥有自己的方法实现。顺便说一句,它还应该优化执行,因为通过 VMT 是多余的。
猜你喜欢
  • 1970-01-01
  • 2021-10-17
  • 2020-07-29
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
相关资源
最近更新 更多