没有指针的复制结构
Copy structure without pointers
我正在尝试在物理组件 (Arduinos) 和飞行模拟器之间创建一个接口,以便控制和显示来自自建部件的模拟器事件。我在学校开始学习 C++,但一直不太热衷。
然而,我用来与我的飞行模拟器通信的库是用 C++ 编写的(称为 SimConnect),我的付费软件飞机的 SDK 也是如此。因此,我认为重新使用它可能比为另一种编程语言创建包装器等更容易。
每次我从模拟器接收到新数据时,我都会将其传递给函数ProcessNGXData
:
PMDG_NGX_Data* previousData;
bool alreadyProcessed = false;
void ProcessNGXData(PMDG_NGX_Data *data)
{
if (!alreadyProcessed || data->LTS_TaxiSw != previousData->LTS_TaxiSw) {
if (data->LTS_TaxiSw)
printf("Taxi Lights: [ON]\n");
else
printf("Taxi Lights: [OFF]\n");
}
if (!alreadyProcessed) {
alreadyProcessed = true;
}
previousData = data;
}
在其他编程语言中,这可能会很好地工作,因此我尝试这样实现它。但是,C++ 指针对我来说有点复杂。
条件 data->LTS_TaxiSw != previousData->LTS_TaxiSw
永远不会计算为 true
。据我了解,这是因为 data
和 previousData
都是指向完全相同结构的指针,因此永远不会不同。
以我的知识和对这些指针的了解不多,我该怎么做?有没有办法复制结构,使它们不同?
提前致谢。
像这样声明以前的数据:
PMDG_NGX_Data previousData;
(没有星号)。现在,当您想要 'save' 结构时,请执行以下操作:
previousData = *data;
(右侧有星号)。请注意,这假设 PMDG_NGX_Data 是可复制的且大小固定。如果它是一个接口或抽象class,那么这是不可能的。也许 API 给你一个 "Clone" 或 "Copy" 你可以调用的方法。
如果 PMDG_NGX_Data
不是太大而无法复制每个 ProcessNGXData
你可以试试这个:
PMDG_NGX_Data previousData;
bool alreadyProcessed = false;
void ProcessNGXData(PMDG_NGX_Data *data)
{
if (!alreadyProcessed || data->LTS_TaxiSw != previousData.LTS_TaxiSw) {
if (data->LTS_TaxiSw)
printf("Taxi Lights: [ON]\n");
else
printf("Taxi Lights: [OFF]\n");
}
if (!alreadyProcessed) {
alreadyProcessed = true;
}
previousData = *data;
}
如果它太大,您可以创建一个结构,它只包含您需要比较的字段,并由 PMDG_NGX_Data
初始化,并每隔 ProcessNGXData
.[=15 初始化该结构=]
我正在尝试在物理组件 (Arduinos) 和飞行模拟器之间创建一个接口,以便控制和显示来自自建部件的模拟器事件。我在学校开始学习 C++,但一直不太热衷。
然而,我用来与我的飞行模拟器通信的库是用 C++ 编写的(称为 SimConnect),我的付费软件飞机的 SDK 也是如此。因此,我认为重新使用它可能比为另一种编程语言创建包装器等更容易。
每次我从模拟器接收到新数据时,我都会将其传递给函数ProcessNGXData
:
PMDG_NGX_Data* previousData;
bool alreadyProcessed = false;
void ProcessNGXData(PMDG_NGX_Data *data)
{
if (!alreadyProcessed || data->LTS_TaxiSw != previousData->LTS_TaxiSw) {
if (data->LTS_TaxiSw)
printf("Taxi Lights: [ON]\n");
else
printf("Taxi Lights: [OFF]\n");
}
if (!alreadyProcessed) {
alreadyProcessed = true;
}
previousData = data;
}
在其他编程语言中,这可能会很好地工作,因此我尝试这样实现它。但是,C++ 指针对我来说有点复杂。
条件 data->LTS_TaxiSw != previousData->LTS_TaxiSw
永远不会计算为 true
。据我了解,这是因为 data
和 previousData
都是指向完全相同结构的指针,因此永远不会不同。
以我的知识和对这些指针的了解不多,我该怎么做?有没有办法复制结构,使它们不同?
提前致谢。
像这样声明以前的数据:
PMDG_NGX_Data previousData;
(没有星号)。现在,当您想要 'save' 结构时,请执行以下操作:
previousData = *data;
(右侧有星号)。请注意,这假设 PMDG_NGX_Data 是可复制的且大小固定。如果它是一个接口或抽象class,那么这是不可能的。也许 API 给你一个 "Clone" 或 "Copy" 你可以调用的方法。
如果 PMDG_NGX_Data
不是太大而无法复制每个 ProcessNGXData
你可以试试这个:
PMDG_NGX_Data previousData;
bool alreadyProcessed = false;
void ProcessNGXData(PMDG_NGX_Data *data)
{
if (!alreadyProcessed || data->LTS_TaxiSw != previousData.LTS_TaxiSw) {
if (data->LTS_TaxiSw)
printf("Taxi Lights: [ON]\n");
else
printf("Taxi Lights: [OFF]\n");
}
if (!alreadyProcessed) {
alreadyProcessed = true;
}
previousData = *data;
}
如果它太大,您可以创建一个结构,它只包含您需要比较的字段,并由 PMDG_NGX_Data
初始化,并每隔 ProcessNGXData
.[=15 初始化该结构=]