没有指针的复制结构

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。据我了解,这是因为 datapreviousData 都是指向完全相同结构的指针,因此永远不会不同。

以我的知识和对这些指针的了解不多,我该怎么做?有没有办法复制结构,使它们不同?

提前致谢。

像这样声明以前的数据:

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 初始化该结构=]