QT 多级嵌套结构体并遍历其成员-模板和宏定义

多级嵌套结构体并遍历其成员是一个复杂的任务。为了实现这一目标,可以结合模板和宏定义来简化代码。以下是一个示例,展示了如何使用模板和宏定义来遍历嵌套结构体的成员。

cpp 复制代码
#include <QDebug>
#include <cstdint>

// 假设这些是你的结构体定义
struct BaseMeterParam_Type {
    int param1;
    float param2;
};

struct NetParam_Type {
    QString ipAddress;
    int port;
};

struct TimingUploadParam_Type {
    int interval;
    bool enabled;
};

struct LadderParam_Type {
    int stepCount;
    float stepValue;
};

struct DeviceParam_Type {
    BaseMeterParam_Type mt_BaseMeter;
    NetParam_Type mt_Net;
    TimingUploadParam_Type mt_TimingUpload;
    LadderParam_Type mt_RunLadder;
    uint16_t m_None;
    uint16_t m_Crc16;
};

// 模板函数,用于打印结构体成员
template<typename T>
void printMember(const QString& name, const T& value) {
    qDebug() << name << ":" << value;
}

// 宏定义,用于遍历结构体成员
#define PRINT_MEMBER(member) printMember(#member, deviceParam.member)

// 遍历DeviceParam_Type的成员
void traverseDeviceParam(const DeviceParam_Type& deviceParam) {
    PRINT_MEMBER(mt_BaseMeter.param1);
    PRINT_MEMBER(mt_BaseMeter.param2);
    PRINT_MEMBER(mt_Net.ipAddress);
    PRINT_MEMBER(mt_Net.port);
    PRINT_MEMBER(mt_TimingUpload.interval);
    PRINT_MEMBER(mt_TimingUpload.enabled);
    PRINT_MEMBER(mt_RunLadder.stepCount);
    PRINT_MEMBER(mt_RunLadder.stepValue);
    PRINT_MEMBER(m_None);
    PRINT_MEMBER(m_Crc16);
}

int main() {
    DeviceParam_Type deviceParam = {
        {1, 2.0f},
        {"192.168.1.1", 8080},
        {60, true},
        {10, 0.5f},
        0,
        0xFFFF
    };

    traverseDeviceParam(deviceParam);

    return 0;
}
相关推荐
誰能久伴不乏34 分钟前
桌面客户端的运行日志系统:SQLite 分块 + 独立写线程 + 文本降级
数据库·c++·qt·架构·sqlite
2601_966949655 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
晨曦中的暮雨7 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
喵了几个咪8 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风8 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
2601_9628857210 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
Wang's Blog10 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
下一站春风里11 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
天外飞雨道沧桑12 小时前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程
hhhjhl12 小时前
Yup 跨端三方库仓颉适配全流程
java·开发语言