You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++14模板类中如何获取模板结构体成员列表以实现批量操作?

实现符合特定要求的C++14类模板(基于GCC编译器)

需求

  • 持有多个派生自同一基类的不同类对象,且所有派生类大小相同;
  • 可通过函数对所有成员执行批量计算;
  • 可单独访问列表中的每个对象;
  • 列表与成员在编译期创建,无需动态列表;
  • 接口简洁,适配C++经验较少的开发者。

期望的用户使用示例代码

// 传感器列表,每个成员对应一个传感器
typedef struct {
    cOneSensor_f A4_temp1 = cOneSensor_f ("A4t1", 0x1234 /*, x, y, ... 更多配置数据*/);
    cOneSensor_i B4_speed = cOneSensor_i ("B4s0", 0x2001 /*, x, y, ... 更多配置数据*/);
}Sensor_list_4_s;

// 将列表放入类模板中,既能整体控制所有传感器,
// 也能单独访问每个传感器
cSensorsList<Sensor_list_4_s> Sensor_list_4( 4 );

// 获取传感器数值
void do_sensors_stuff()
{
    // 操作所有传感器
    Sensor_list_4.update();

    // 单独访问每个传感器
    float A4t1 = Sensor_list_4.A4_temp1();
    int   B4s0 = Sensor_list_4.B4_speed();
}

初步实现思路与当前状态

已定义基类cOneSensor及派生类cOneSensor_f、cOneSensor_i,通过模板类cSensorsList<T>继承T以获取成员访问能力,初步代码如下:

class cOneSensor {};
class cOneSensor_f : public cOneSensor {};
class cOneSensor_i : public cOneSensor {};

template <typename T>
class cSensorsList: public T
{
private:
    int bus_code;
    cOneSensor *p_to_sensors_array;
    int nSensors;

public:
    cSensorsList(int bus_code):bus_code(bus_code)
    {
        // --- 我不知道该怎么实现:从类型T中获取传感器列表
        nSensors = 0; // getSensorListSize_from_T(/* T */);
        p_to_sensors_array= 0;// getSensorListPointer_from_T<T>(/* T */);
        // ---
    }
    void update(void) {
        for (int i=0; i<nSensors; i++)
            p_to_sensors_array[i].update();
    }
};

已实现功能

  • cSensorsList可单独访问每个成员对象;
  • 用户接口简洁;
  • 所有对象封装在类中。

待解决问题

在cSensorsList<T>类中,如何获取模板结构体T的成员列表,构造指针数组以实现对所有成员的批量操作(如调用update函数)。

内容的提问来源于stack exchange,提问作者piedramania

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:20:21