复制不带指针的结构

Copy structure without pointers

本文关键字:结构 指针 复制      更新时间:2023-10-16

我试图在物理组件(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++指针对我来说稍微复杂一些

条件CCD_ 2从不计算为CCD_ 3。根据我的理解,这是因为datapreviousData都是指向完全相同结构的指针,因此永远不会不同。

我对这些指针知之甚少,又不太了解,我该怎么做呢?有没有一种方法可以复制结构,这样它们就可以有所不同?

提前谢谢。

像这样声明previousData:

PMDG_NGX_Data previousData;

(没有星号)。现在,当你想"保存"结构时,可以这样做:

previousData = *data;

(右手边有一个星号)。请注意,这假设PMDG_NGX_Data是可复制的并且大小固定。如果它是一个接口或抽象类,那么这是不可能的。也许API为您提供了一个可以调用的"克隆"或"复制"方法。

如果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初始化该结构。