程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Arduino C++ 取消引用#define 或 const int?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Arduino C++ 取消引用#define 或 const int??

开发过程中遇到Arduino C++ 取消引用#define 或 const int?的问题如何解决?下面主要结合日常开发的经验,给出你关于Arduino C++ 取消引用#define 或 const int?的解决方法建议,希望对你解决Arduino C++ 取消引用#define 或 const int?有所启发或帮助;

我对我的 C++ 非常生疏,所以如果这根本不是关于取消引用的问题,请原谅我。但我认为这是正确的术语。

我正在整理一个 Arduino 草图,以发送原始红外信号来模拟红外控制器。

为了实现这一点,我发送了一个 JsON 字符串,该字符串引用了我包含的头文件中定义的信号。我正在虑为每个控制器创建一个单独的文件,并且我想在每个标头中使用 #define 语句以确保我能够很好地分离每个信号名称。如果你愿意的话,可以说是我自己的命名空间。

所以在标题中我有遥控器上的电源按钮的这个信号:

#include <stdint.h>
#include <Arduino.h>

#define AKB73575431_DATA_LEN 69
String AKB73575431_mfr = "LG";
uint16_t AKB73575431_power [AKB73575431_DATA_LEN] = {
  4400,4600,550,600,500,1650,1700,650,1000
};

你们中的一些人可能会认出这种数据格式是直接从 IRlib2 教程中抄袭而来的。

我想发送一个 JsON 字符串:

{"cmd": "txIRraw","key": "AKB73575431_power"}

我的问题是我可以解析“key”值中的字符串并使用子字符串:

AKB73575431

构造对定义的引用:

#define AKB73575431_DATA_LEN 69

如果失败,是否可以将定义更改为全局 int 并取消引用它?

我一直在谷歌上搜索 C++ 中的解引用变量,但一直在获取有关指针的页面。我想要做的是从字符串构造变量或#define 名称,然后使用它。

这可能吗,如果可能,有人能给我举个例子吗?

非常感谢

卡利

解决方法

如果我正确理解您的问题,您正在尝试查看是否可以使用字符串 "AKB73575431",创建具有相同名称 AKB73575431 的变量,并分{{ 1}} 到它。

快速回答是否定的。您不能基于另一个字符串的值创建变量名称。

你可以使用两种不同的方法来达到类似的效果(我猜)。


首先,您可以使用宏。

你可以反过来做一些事情。假设您要创建多个前缀为 AKB_LEN 的变量,例如 AKB_AKB_lenAKB_power。你可以用宏来做到这一点:

AKB_mfr

所以你可以像这样使用它:

#define create(NAME,value) decltype(value) AKB_##NAME{value}

或:

create(LEN,10); // create a variable called `AKB_LEN`,and has the value of 10

但是,我不推荐这个。很难获得您创建的变量名称,因为它们隐藏在宏下。如果您有另一个名称不同的遥控器,则需要创建一个全新的宏功能,以使其工作。


第二种方式是通过OOP。您将创建一个 String s = "abc"; create(S,s); // create a variable called `AKB_S`,and has the type String and value "abc" 类,并且 Remote 可能具有不同的成员,例如 name、mfr 和 power:

Remote

然后你可以像这样创建 struct Remote { std::string name; std::string mfr; std::vector<int> power; }

Remote

然后您可以使用 Remote AKB{"AKB",AKB_mfr,{std::being(AKB_power},std::end(AKB_power)}; AKB.mfr 之类的东西访问它的数据


此外,您还@R_696_9838@没有 AKB.power 成员的 Remote 类,并将遥控器存储在地图容器中:

name

然后您@R_696_9838@如下地图:

struct Remote
{
    std::string mfr;
    std::vector<int> power;
}

并向地图添加新的遥控器,例如:

std::map<std::string,Remote> Remotes;

现在,如果您想从地图访问名为 Remotes.emplace("AKB",Remote{AKB_mfr,{std::begin(AKB_power),std::end(AKB_power)}}); 的遥控器,您可以执行以下操作:

"AKB"

大佬总结

以上是大佬教程为你收集整理的Arduino C++ 取消引用#define 或 const int?全部内容,希望文章能够帮你解决Arduino C++ 取消引用#define 或 const int?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。