Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino C++;解引用a#define或const int? 我对我的C++非常生疏,所以请原谅我,这不是一个关于撤销引用的问题。但我认为这是正确的术语_C++_Parsing_Arduino_Dereference_Infrared - Fatal编程技术网

Arduino C++;解引用a#define或const int? 我对我的C++非常生疏,所以请原谅我,这不是一个关于撤销引用的问题。但我认为这是正确的术语

Arduino C++;解引用a#define或const int? 我对我的C++非常生疏,所以请原谅我,这不是一个关于撤销引用的问题。但我认为这是正确的术语,c++,parsing,arduino,dereference,infrared,C++,Parsing,Arduino,Dereference,Infrared,我正在制作一个Arduino草图,以发送原始红外信号来模拟红外控制器 为了实现这一点,我将发送一个JSON字符串,该字符串引用我所包含的头文件中定义的信号。我正在考虑为每个控制器创建一个单独的文件,并且我希望在每个头中使用一个#define语句,以确保每个信号名都得到很好的分离。如果你愿意的话,有点像滚动我自己的名称空间 因此,在标题中,我有一个遥控器上电源按钮的信号: #include <stdint.h> #include <Arduino.h> #define A

我正在制作一个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,600,550,1650,550,1700,
  550,600,500,1700,550,600,550,600,500,600,
  550,550,550,1700,550,1650,550,600,550,1700,
  500,650,500,600,500,600,550,1700,550,1650,
  600,1650,550,1700,550,600,500,600,550,600,
  500,1700,550,600,550,550,550,600,500,600,
  500,1700,600,1650,550,1700,550,1000
};
我的问题是我是否可以解析“key”值中的字符串并使用子字符串:

AKB73575431
要构造对定义的引用,请执行以下操作:

#define AKB73575431_DATA_LEN 69
否则,是否可以将define更改为全局int并取消对它的引用

我一直在C++中对变量进行格式化,但是在指针上保持页面。我要做的是构造变量或#从字符串定义名称,然后使用它

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

非常感谢


Kali

如果我正确理解了您的问题,您将尝试查看是否可以使用字符串“AKB73575431”,创建一个同名的变量
AKB73575431
,并将
AKB_LEN
的值分配给它

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

有两种不同的方法可以达到相似的效果(我想)


首先,可以使用宏

你可以反过来做。如果要创建前缀为
AKB_
的多个变量,例如
AKB_len
AKB_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。您将创建一个
Remote
类,
Remote
可能有不同的成员,例如name、mfr和power:

struct Remote
{
    std::string name;
    std::string mfr;
    std::vector<int> power;
}
然后,您可以通过
AKB.mfr
AKB.power


此外,还可以使
Remote
类不包含
name
成员,并将Remote存储在地图容器中:

struct Remote
{
    std::string mfr;
    std::vector<int> power;
}
现在,如果您想从地图上访问一个名为“AKB”的遥控器,您可以执行以下操作:

Remotes["AKB"].mfr

我很难理解你想做什么。我相信引用和取消引用不是你要找的术语。您的意思是,如果您可以使用子字符串“AKB…”来创建一个名为“
AKB…”
”的变量,并将值
69
赋给它吗?我的简单方法是编写一个脚本(ksh、awk、python…)来解析它并为您编写代码。另一种方法是使用std::array代替C-array。而如果你在C++中编写代码,你可以使用<代码> CONTXPRPR <代码>代替<代码>定义< <代码>。不,A定义是一个预处理器宏,而不是变量。谢谢你的彻底回复。我想我还不够清楚,因为我不想“创建”变量。只需在JSON字符串中引用它,并以指向它的指针结束。我认为地图建议是最有可能的答案,但我一直在努力让它在Arduino上发挥作用。上一次我尝试添加库时出现了大量的编译错误,甚至没有对库做任何操作。但我会再试一次。也许是一个过时的图书馆或什么的。再次感谢:)
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)}});
Remotes["AKB"].mfr