gpt4 book ai didi

c++ - 通过名称访问结构变量

转载 作者:行者123 更新时间:2023-11-30 05:30:20 25 4
gpt4 key购买 nike

我正在尝试创建将使用 CSV 文件中提供的数据的程序。

到目前为止,我已经制作了这个 CSV 文件的结构,并且能够用它的数据填充 vector 。

我试图实现的是允许用户输入传感器名称并使用给定的传感器列表进行检查。

我想做的是在用户输入传感器名称后,访问已创建的包含数据的 vector 并显示该特定传感器的数据。

这是我制作的结构:

typedef struct SensorReadings {
int Month;
int Day;
double Dp; // Dew Point Temperature
double Dta; // Wind Direction (10min Avg)
double Dts; // Wind Direction (10min SD)
double EV; // Evaporation (Year to Date)
double QFE; // Barometric Pressure
double QFF; // Barometric Pressure (QFE*Kqff)
double QNH; // Barometric Pressure (Aviation Standard)
double RF; // Rainfall (Year to Date)
} SensorReadings;

这是我提示用户输入传感器名称的代码:

std::cout << std::endl << std::endl << "Available Sensors: " << std::endl;
std::cout << "Dp Dta Dts EV QFE QFF QNH RF" << std::endl << std::endl;
do {
std::cout << "Please select Sensor you want to work with: ";
std::cin >> selectedSensor;

isSensorValid = std::find(std::begin(availableSensors), std::end(availableSensors), selectedSensor) != std::end(availableSensors);
} while(!isSensorValid);

我还做了一个方法来获取全年数据的平均每日值(value):

double getAverageReadings(int wDay, int wMonth) {
std::vector<SensorReadings> pData = fm.parsedFile;
double DewPointTemperature = 0.0;
for(int r = 0; r < pData.size(); r++) {
if(pData[r].Month == wMonth) {
if(pData[r].Day == wDay) {
if(pData[r].Dp >= 100)
DewPointTemperature = DewPointTemperature + cWTKW(pData[r].Dp);
}
}
}
return DewPointTemperature;
}

此函数允许我获取每个月的每一天的露点温度的日平均值,我想做的是能够做类似的事情这个:

double getAverageReadings(int wDay, int wMonth, std::string selectedSensor) {
/*
Magic to convert std::string to actual Structure parameter
Pseudo:
param Sensor = convert(selectedSensor, to SensorReadingsParam);
*/
std::vector<SensorReadings> pData = fm.parsedFile;
double averageReadingsForSensor = 0.0;
for(int r = 0; r < pData.size(); r++) {
if(pData[r].Month == wMonth) {
if(pData[r].Day == wDay) {
if(pData[r].Sensor >= 100)
averageReadingsForSensor = averageReadingsForSensor + cWTKW(pData[r].Sensor);
}
}
}
return averageReadingsForSensor;
}

我以前从未使用过“动态”参数,所以我正在寻求这方面的帮助。

感谢您的关注,感谢您对此主题的任何帮助!

最佳答案

您有两个基本选择:

  1. 不要为每个“传感器”声明显式变量,而是使用 std::map

    typedef struct SensorReadings {
    int Month;
    int Day;
    std::map<std::string, double> sensor_value;
    } SensorReadings;

并将每个传感器值存储在 map 中,以传感器名称为键,即 sensor_value["Dp"]sensor_value["Dta"] 等。

然后,给定一个传感器名称 std::string sensor_name,您可以轻松地在 map 中查找该传感器的值(当然,在检查它是否存在之后)。

  1. 第二个选项是维护一个单独的传感器名称列表,以及一个指向相应类成员的指针,类似于:

    static struct {
    const char *name;
    double SensorReadings::*value;
    } sensor_names[]={
    { "Dp", &SensorReadings::Dp },
    { "Dta", &SensorReadings::Dta },
    };

并且您可以使用此表将传感器名称映射到类成员。这有点丑陋,但它是可行的。我自己更愿意使用第一个选项。

关于c++ - 通过名称访问结构变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36001204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com